web-dev-qa-db-fra.com

Comment éviter qu'on me demande un mot de passe à chaque fois que je pousse sur Bitbucket

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
...
238
tshepang

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 .

363
jmtd

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é.

48
stefano

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

29
Faheem Mitha

Créez (ou modifiez s'il existe) le fichier ~/.ssh/config suivant:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa
20
ness-EE

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.

6
jasonwryan

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.

0
belka