Sessões SSH não interativas
Se você não precisar ter uma sessão interativa no servidor remoto, poderá executar ssh
em 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_ASKPASS
variável de ambiente como o caminho para este programa e execute ssh
a 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_ASKPASS
e DISPLAY
(para X11, definido por padrão), o SSH executa o programa especificado por SSH_ASKPASS
e 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 security
para 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 ssh
linha de comando) é o comando executado quando o ssh
login é 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 sshpass
e 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 security
imediatamente 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-yourhostname
para conectar, recuperar e digitar a senha automaticamente.
STDIN is not a terminal
. 2) Para sessões interativas comsshpass
, a-p
opção aparentemente não faz nada. Mas corrersshpass
enquantoSSH_ASKPASS
está definido funciona!