Eu encontrei uma solução (graças a Daniel Beck por fornecer as principais informações necessárias para isso). Observe que eu testei apenas isso com o OS X Lion 10.7.2. Se isso não funcionar para você, tente a solução de Daniel.
Primeiro, precisamos definir a variável de ambiente SSH_ASKPASS - seu valor deve ser o caminho para um programa que imprime a senha para a saída padrão. Para obter a senha do chaveiro, é assim que ela precisa ser (chamo de get-ssh-password.sh ):
#!/bin/bash
/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2
Alguns pontos a serem observados:
-
Isso pressupõe que você tenha armazenado a senha no conjunto de chaves da maneira que descrevi na pergunta
-
O programa dado em
SSH_ASKPASSserá chamado sem nenhum argumento; 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 e SSH_PASSWORD_HOSTNAME e executar sshpass para fazer login em nosso servidor.
Eu criei outro script, ssh-kcpass , para fazer isso:
#!/bin/bash
export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "$1" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "$1" | cut -d@ -f2)
sshpass ssh "$1"
Para entrar no servidor ssh sem digitar nenhuma senha, você só precisa executar ssh-kcpass user@hostname .