Comment éviter de demander à la phrase secrète chaque fois que j'appuie sur Bitbucket

217

J’ai mis en place mes fichiers SSH à l’aide de ce guide , qui fonctionnait bien auparavant (je pouvais courir hg pushsans demander de phrase secrète). Qu'est-ce qui aurait pu se passer entre maintenant et maintenant, étant donné que j'utilise toujours le même répertoire de base.

$ 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
...
Tshepang
la source

Réponses:

337

Vous devez utiliser un agent SSH. Réponse courte: essayez

$ ssh-add

avant de pousser. Fournissez votre phrase secrète à la demande.

Si vous n'exécutez pas déjà d'agent ssh, vous recevrez 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)

Puis répétez la ssh-addcommande.

Il vaut la peine de consulter la page de manuel de l'agent ssh .

jmtd
la source
2
Quel est le point de la evalpourriez-vous simplement taper ssh-agent?
James McMahon
4
Il affiche certaines commandes qui vous permettent de l'utiliser, mais ne les exécute pas pour vous. evalfait les excutations.
Tshepang
Pas lié à la question initiale mais si vous continuez à avoir ces problèmes sur GitHub, Bitbucket, etc., assurez-vous que vous utilisez l'URL git / ssh, pas le http, qui continuera à demander le nom d'utilisateur et le mot de passe.
Czechnology
Et si vous n'avez pas de clé par défaut, ou si vous voulez en ajouter de multiples,ssh-add /path/to/key
hoosierEE
46

Une façon de résoudre ceci est avec ssh-agentet ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Ensuite, la phrase secrète est enregistrée pour la session en cours. et ne sera plus demandé.

Stefano
la source
7
La plupart des gens ne veulent pas du tout être critiqués pour leurs phrases de passe.
connexo
26

J'utilise Keychain pour gérer les clés SSH. Il est également disponible dans Debian et donc vraisemblablement Ubuntu avec

apt-get install keychain

Voici la page du paquet du trousseau Debian . Comme vous pouvez le constater, le projet n’est pas très actif, mais fonctionne pour moi. J'ai également commenté un peu à ce sujet dans une autre réponse ici

Faheem Mitha
la source
2
// Cela a fonctionné pour moi. C'est bien mieux que ssh-agent, car je n'ai pas besoin d'entrer mon mot de passe de clé ssh chaque fois que j'ouvre un terminal .
Nathan Basanese
@NathanBasane dites-vous qu'en utilisant le trousseau, vous n'avez pas besoin de saisir le mot de passe de la clé ssh à chaque fois que vous ouvrez un terminal? Comment configurez-vous cela? car keychain continue à demander le mot de passe à chaque fois que j'ouvre le terminal, mais seulement la première fois que je l'ouvre après le démarrage, mais quand même. Je ne veux pas entrer le mot de passe à chaque fois.
m4l490n
@ m4l490n Non, si vous utilisez le trousseau, vous n'avez pas besoin d'entrer le mot de passe de la clé ssh à chaque fois que vous ouvrez un terminal. Mais vous devez y entrer une fois après le démarrage. La phrase secrète n'est pas enregistrée sur le disque - cela ne serait pas sûr.
Faheem Mitha
Pour moi, il demande chaque fois que je me connecte (j'ai un référentiel git + clés ssh sur un serveur distant et chaque fois que je fais un "tirage sur git", je dois entrer la phrase secrète)
Martin Thoma
@ MartinThoma Cela semble faux. Vérifiez que vous avez configuré .ssh correctement. En particulier, votre shell est-il correctement configuré? Si cela ne fonctionne toujours pas pour vous et que vous ne pouvez pas le comprendre, vous pouvez poser une question.
Faheem Mitha le
13

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

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa
ness-EE
la source
Mais j'utilise une paire de clés différente pour chaque service ...
connexion
@connexo vous pouvez remplacer l'astérisque générique par votre nom d'hôte individuel et par 'id_rsa' par votre clé privée correspondante
ness-EE
1
J'avais besoin d'ajouter IgnoreUnknown AddKeysToAgent,UseKeychainjuste au-dessus UseKeychain yes.
ConsideRatio
1
J'obtiens cette erreur: "Option de configuration incorrecte: usekeychain" sur la ligne "UseKeychain yes".
m4l490n
@ m4l490n: il semble que l' UseKeychainoption ait été ajoutée dans OpenSSH 7.1p2 (2016-02-28). Peut-être que vous avez une version précédente. openssh.com/txt/release-7.2
chus
6

Pour plus de commodité, la méthode optimale est une combinaison des réponses de jmtd et de Faheem .

Utiliser ssh-agentseul signifie qu'une nouvelle instance de ssh-agentdoit être créée pour chaque nouveau terminal que vous ouvrez. keychainune fois initialisé, il demandera le mot de passe composé pour la ou les clés privées et le stockera. De cette façon, votre clé privée est protégée par un mot de passe, mais vous n’aurez pas à entrer votre mot de passe encore et encore.

Le wiki Arche recommande de l' initialisation porte - clés /etc/profile.d/ou votre profil de shell, comme .bash_profileou .bashrc. Cela a pour inconvénient d’initialiser votre trousseau dès que vous ouvrez un terminal.

Une approche plus flexible consiste à combiner keychainavec une tmuxsession 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 il ne vous reste plus qu'à démarrer la tmuxsession sécurisée au fur et à mesure des besoins (lancée à partir d'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

Désormais, votre trousseau ne sera initialisé qu'une fois lorsque vous démarrez cette tmuxsession spécifique . Tant que cette session persiste, vous pourrez accéder à ces sshclés et accéder à vos référentiels distants.

jasonwryan
la source
Comment pourrais-je obtenir que cela fonctionne sur une machine distante? J'ai modifié le second script pour vérifier $ SSH_CLIENT et s'il existe, n'exécute pas urxvtc, mais simplement tmux. Cela fonctionne, mais le problème est la partie .bash_profile. Lorsque je me connecte pour la première fois à la boîte de dialogue, le message "serveur introuvable: connexion refusée" correspond à la sortie de "tmux ls". Ensuite, lorsque j'exécute le second script, tmux démarre une nouvelle session ou se connecte à une session existante, mais il n'y a pas d'invite de trousseau. Ensuite, lorsque je quitte la session, l'invite du trousseau est en attente.
Jonyamo
J'ai mis à jour la réponse pour faire taire la sortie de tmux s'il n'y a pas de session.
jasonwryan
Merci, mais cela ne résout toujours pas le problème du trousseau. tmux crée la nouvelle session mais accède directement à une invite vide. Ce n'est que lorsque je quitte la session tmux que je vois l'invite du trousseau demandant ma phrase secrète.
Jonyamo
Je suppose que je devrais arrêter de dire keychain, car keychain n'est exécuté que dans .bash_profile. Le problème vient de l'exécution de ssh-add. Bien que, si je lance ssh-add manuellement après la création de la session tmux, cela fonctionne.
Jonyamo
1
Ignorez le second script et démarrez simplement votre session tmux sécurisée à partir de .profilecette page. Ainsi, vous obtiendrez une invite pour les clés dès votre connexion.
jasonwryan
0

Vous pouvez utiliser sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Vous avez juste besoin d'ajouter sshpass -p yourpassphraseavant d'ajouter votre sshcommande habituelle .

Belka
la source
2
Cela semble être une idée vraiment stupide. Cela ne ferait-il pas apparaître votre mot de passe en texte clair dans l'historique de votre shell?
connexo
Exactement, mais n'êtes-vous pas censé protéger votre session avec un mot de passe également?
Belka
1
Même si vous le faites, combien de fois avez-vous un collègue assis à côté de vous et qui vous aide / apprend de vous?
connexo