Configuré mis cosas ssh con la ayuda de esta guía , y solía funcionar bien (podría ejecutar hg Push
sin que se le pida una frase de contraseña). Lo que podría haber sucedido entre entonces y ahora, teniendo en cuenta que todavía estoy usando el mismo directorio de inicio.
$ cat .hg/hgrc
[paths]
default = ssh://[email protected]/tshepang/bloog
$ hg Push
Enter passphrase for key '/home/wena/.ssh/id_rsa':
pushing to ssh://[email protected]/tshepang/bloog
searching for changes
...
Necesita usar un agente ssh. Respuesta corta: prueba
$ ssh-add
antes de empujar Proporcione su frase de contraseña cuando se le solicite.
Si aún no está ejecutando un agente ssh, recibirá el siguiente mensaje:
Could not open a connection to your authentication agent.
En esa situación, puede iniciar uno y configurar su entorno de esta manera
eval $(ssh-agent)
Luego repite el ssh-add
comando.
Vale la pena echar un vistazo a página de manual del agente ssh .
Una forma de resolver esto es con ssh-agent
y ssh-add
:
$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa:
Después de esto, la frase de contraseña se guarda para la sesión actual. y no me volverán a preguntar.
Yo uso Keychain para administrar las claves ssh. También está disponible en Debian y, presumiblemente, Ubuntu con
apt-get install keychain
Aquí está el página del paquete de llavero Debian . Como puede ver, el proyecto no es muy activo, pero funciona para mí. También comenté un poco sobre esto en otra respuesta aquí
Cree (o edite si existe) el siguiente archivo ~/.ssh/config:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
Por conveniencia, el método óptimo es una combinación de las respuestas de jmtd y Faheem .
Utilizando ssh-agent
solo significa que una nueva instancia de ssh-agent
debe crearse para cada nueva terminal que abra. keychain
cuando se inicializa pedirá la frase de contraseña para la (s) clave (s) privada (s) y la almacenará. De esa manera, su clave privada está protegida con contraseña, pero no tendrá que ingresarla una y otra vez.
El Arch wiki recomienda inicializar el llavero desde /etc/profile.d/
o su perfil de Shell, como .bash_profile
o .bashrc
. Esto tiene la desventaja de que inicializa su llavero tan pronto como abre un terminal.
Un enfoque más flexible es combinar keychain
con una sesión específica tmux
. Entonces, en .bash_profile
:
tsess=$(tmux ls 2>&1)
if [[ "${tsess%%:*}" = "secured" ]] &&
[[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
# start keychain
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
. $HOME/.keychain/$HOSTNAME-sh
fi
... y luego es solo un caso de iniciar la sesión segura tmux
cuando sea necesario (lanzado desde un teclado):
#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"
if [[ -z "$SSH_AUTH_SOCK" ]]; then
eval `ssh-agent`
trap "kill $SSH_AGENT_PID" 0
fi
if [[ -z "$PID" ]]; then
urxvtc -title "SSH" -e sh -c "${new}"
else
urxvtc -title "SSH" -e sh -c "${old}"
fi
ssh-add
Ahora, su llavero solo se inicializará una vez cuando inicie esa sesión específica de tmux
. Mientras esa sesión persista, podrá acceder a esas teclas ssh
y Push a sus repositorios remotos.
Puede usar sshpass
:
$ Sudo apt-get install sshpass
$ sshpass -p 'password' ssh [email protected]
Solo necesita agregar sshpass -p yourpassphrase
antes de agregar su comando habitual ssh
.