J'ai configuré mes trucs ssh à l'aide de ce guide , et cela fonctionnait bien (je pouvais exécuter hg Push
sans qu'on lui demande de phrase secrète). Qu'est-ce qui aurait pu arriver entre alors et maintenant, étant donné que j'utilise toujours le même répertoire personnel.
$ 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
...
Vous devez utiliser un agent ssh. Réponse courte: essayez
$ ssh-add
avant de pousser. Fournissez votre phrase secrète lorsque vous y êtes invité.
Si vous n'exécutez pas déjà un agent ssh, vous obtiendrez le message suivant:
Could not open a connection to your authentication agent.
Dans cette situation, vous pouvez en démarrer un et configurer ainsi votre environnement
eval $(ssh-agent)
Répétez ensuite le ssh-add
commande.
Cela vaut la peine de jeter un œil à la page de manuel de l'agent ssh .
Un moyen de résoudre ce problème est avec ssh-agent
et ssh-add
:
$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa:
Après cela, la phrase secrète est enregistrée pour la session en cours. et ne sera plus demandé.
J'utilise Keychain pour gérer les clés ssh. Il est également disponible dans Debian et donc probablement Ubuntu avec
apt-get install keychain
Voici la page du paquet du trousseau Debian . Comme vous pouvez le voir, le projet n'est pas très actif, mais fonctionne pour moi. J'ai aussi commenté un peu à ce sujet dans une autre réponse ici
Créez (ou modifiez s'il existe) le fichier ~/.ssh/config suivant:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
Pour plus de commodité, la méthode optimale est une combinaison des réponses de jmtd et Faheem .
En utilisant ssh-agent
seul signifie qu'une nouvelle instance de ssh-agent
doit être créé pour chaque nouveau terminal que vous ouvrez. keychain
une fois initialisé, il demandera la phrase secrète pour la ou les clés privées et les stockera. De cette façon, votre clé privée est protégée par mot de passe, mais vous n'aurez pas à saisir votre mot de passe encore et encore.
Arch wiki recommande d'initialiser le trousseau de /etc/profile.d/
ou votre profil Shell, tel que .bash_profile
ou .bashrc
. Cela présente un inconvénient en ce qu'il initialise votre trousseau dès que vous ouvrez un terminal.
Une approche plus flexible consiste à combiner keychain
avec une session tmux
spécifique. Donc, dans .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
... et ensuite il s'agit juste de démarrer la session sécurisée tmux
au fur et à mesure des besoins (lancée depuis un raccourci clavier):
#!/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
Maintenant, votre trousseau ne sera initialisé qu'une seule fois lorsque vous démarrez cette session tmux
spécifique. Tant que cette session persiste, vous pourrez accéder à ces clés ssh
et pousser vers vos référentiels distants.
Vous pouvez utiliser sshpass
:
$ Sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server
Vous avez juste besoin d'ajouter sshpass -p yourpassphrase
avant d'ajouter votre commande ssh
habituelle.