Sessões SSH não interativas
Se você não precisar ter uma sessão interativa no servidor remoto, poderá executar sshem um ambiente sem tty, por exemplo, como parte de uma ação Executar Shell Script no Automator .
Você precisa criar um programa que, quando chamado, imprima a senha como padrão, por exemplo, o seguinte script bash que você precisa para tornar executável usando chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Em seguida, defina a SSH_ASKPASSvariável de ambiente como o caminho para este programa e execute ssha ação do Automator, da seguinte maneira:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Quando não há tty, mas SSH_ASKPASSe DISPLAY(para X11, definido por padrão), o SSH executa o programa especificado por SSH_ASKPASSe usa sua saída como senha. Isso deve ser usado em ambientes gráficos, para que uma janela possa aparecer solicitando sua senha. Nesse caso, pulamos a janela, retornando a senha do nosso programa. Você pode usar securitypara ler a partir do seu chaveiro, assim:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(na sshlinha de comando) é o comando executado quando o sshlogin é efetuado e sua saída é impressa no Automator. Obviamente, você pode redirecioná-lo para um arquivo para registrar a saída do programa iniciado.
Sessões interativas de SSH usando sshpass
Eu baixei, compilei e instalei sshpasse funcionou perfeitamente. Aqui está o que eu fiz:
- Obtenha as ferramentas de desenvolvedor da Apple
- Faça o download e abra
sshpass-1.05.tar.gz
- Abra um shell no diretório
sshpass-1.05
- Corre
./configure
- Corre
make
- Executar
make install(você pode precisar sudo)
Agora o programa está instalado no /usr/local/bin/sshpass. Execute usando uma linha como a seguir:
sshpass -pYourPassword ssh username@hostname
Você pode ler a senha securityimediatamente antes de fazer isso e usá-la assim:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Embrulhe isso em uma função shell e você pode digitar, por exemplo, ssh-yourhostnamepara conectar, recuperar e digitar a senha automaticamente.
STDIN is not a terminal. 2) Para sessões interativas comsshpass, a-popção aparentemente não faz nada. Mas corrersshpassenquantoSSH_ASKPASSestá definido funciona!