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!STDIN is not a terminal
erro. No entanto, desta vez não fui solicitada nenhuma senha; Acredito queSSH_ASKPASS
esteja trabalhando no Automator, pois, se eu fizer o arquivoSSH_ASKPASS
retornar a senha errada, recebo umPermission denied, please try again.
erro.macOs >= 10.13
Encontrei uma solução (obrigado a Daniel Beck por fornecer as principais informações necessárias para isso). Observe que eu só testei isso com o OS X Lion 10.7.2. Se isso não funcionar, tente a solução de Daniel.
Primeiro, precisamos definir a
SSH_ASKPASS
variável de ambiente - seu valor deve ser o caminho para um programa que imprime a senha na saída padrão. Para obter a senha do chaveiro, é assim que ela deve ser (eu chamoget-ssh-password.sh
):Alguns pontos a serem observados:
Isso pressupõe que você tenha armazenado a senha no chaveiro da maneira que descrevi na pergunta
O programa indicado
SSH_ASKPASS
será chamado sem argumentos; então usamos variáveis de ambiente para passar o usuário e o nome do host para ele.Agora podemos definir
SSH_PASSWORD_USER
eSSH_PASSWORD_HOSTNAME
executarsshpass
para fazer login no nosso servidor.Eu criei outro script,,
ssh-kcpass
para fazer isso:Para fazer login no servidor ssh sem digitar nenhuma senha, basta executar
ssh-kcpass user@hostname
.fonte
macOS >= 10.13
Olá pessoal, me deparei com esse tópico procurando alguma outra coisa, mas ... Não sei se estou perdendo alguma coisa aqui ... mas sua abordagem me parece estranha. por que não usar autenticação de chave pública ... Gere uma chave rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Idealmente, você usaria uma vez o usuário ssh-copy-id @ host e autenticaria com a senha uma vez para instalar a chave no outro servidor, ou usaria qualquer tipo de ferramenta de script ou authomação para implantar a chave em ~ / .ssh / allowed_keys em o outro host (para o usuário no qual você deseja fazer login) Se feito com o comando manualmente, você deverá editar o arquivo / etc / ssh / sshd_config de acordo e a automação (chef, ansible) pressionará a condição completa no estado desejado.
A chave que importa distribuir é id_rsa.pub, mantenha a chave privada segura
Para usar as chaves para se autenticar nos hosts de maneira direta e automática, edite em sua máquina o ~ / .ssh / config e adicione:
Anfitrião * UseKeychain sim
Procure mais informações sobre as opções do arquivo de configuração ssh, espero que isso seja útil
fonte