Comment puis-je effectuer un `git pull` sans ressaisir mon mot de passe SSH?

96

Est-il possible de configurer git/sshpour ne pas avoir à entrer ma phrase de passe chaque fois que je veux effectuer une git pull? Notez que le dépôt est privé sur github.

Ou, sinon, quelle serait la meilleure pratique pour automatiser le déploiement de code à partir d'un dépôt Github privé?

Détails supplémentaires: instance EC2 exécutant une AMI publique basée sur Fedora.

jldupont
la source
2
duplication possible de la configuration de Git sur SSH
meagar
Vous avez une solution à ce problème?
nim le
À partir de git 2.11+ (Q4 2016), l'utilisation de libsecret est un autre moyen: stackoverflow.com/a/40312117/8477066
Hielke Walinga

Réponses:

69

Jetez un œil à ce lien https://help.github.com/articles/working-with-ssh-key-passphrases/

Mais je ne veux pas entrer une longue phrase secrète chaque fois que j'utilise la clé!

Moi non plus! Heureusement, il existe un petit outil astucieux appelé ssh-agentqui peut enregistrer votre phrase de passe en toute sécurité afin que vous n'ayez pas à la ressaisir. Si vous êtes sur OSX Leopard ou version ultérieure, vos clés peuvent être enregistrées dans le trousseau du système pour vous rendre la vie encore plus facile. La plupart des installations Linux démarreront automatiquement ssh-agent pour vous lorsque vous vous connecterez.

Fredrik Pihl
la source
3
peu nerveux de répondre à quelqu'un avec une réputation de 17,7k; ai-je mal interprété la question ... ;-)
Fredrik Pihl
3
nerveux? rassurez-vous: la grande majorité des gens ici sont assez bien élevés ... et ceux qui ne le sont pas, eh bien, ils ont de plus gros problèmes que moi :)
jldupont
2
Ce lien a été utile pour expliquer les commandes à exécuter pour enregistrer votre phrase secrète dans ssh-agent: rabexc.org/posts/using-ssh-agent
Mateus Gondim
Je ne veux pas utiliser de clés. Simple j'ai user \ pass et je veux l'enregistrer côté client git
nim
Pourquoi le lien ne fournit-il que des options Mac / Widows? Je veux git pull sur le serveur unix sans ressaisir le pass. a réussi à le faire fonctionner pour un projet historique mais je ne peux pas dire ce que j'ai fait là-bas. Est-ce que lorsque vous ssh sur une machine Unix distante, la clé est transmise et utilisée à la place comme clé git pull (ou vcs de compositeur privé)? Je crois que je ne comprends pas quelque chose ici. Toute aide appréciée :)
trainoasis
29

J'ai activé la mise en cache du mot de passe comme décrit ici:

https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

Pour mettre en cache le mot de passe pendant un mois:

git config --global credential.helper 'cache --timeout=2628000'
Sileria
la source
Merci, temuri, j'ai cherché partout ce détail exact. Cela ne fonctionnait pas, mais la documentation ne mentionne apparemment pas que ce n'est que pour HTTPS.
Mike Emery
2
Si vous utilisez un mot de passe ( pas une phrase de passe avec un fichier de clé) pour une URL basée sur SSH d'un dépôt Git distant, vous ne pouvez pas du tout enregistrer le mot de passe. Mais j'ai remarqué qu'après avoir émis une commande git, vous pouvez immédiatement taper le mot de passe et appuyer sur Entrée . Vous n'avez pas besoin d'attendre que l'invite de mot de passe s'affiche.
ADTC
1
git still ask pass
nim
12

Essaye ça:

git config credential.helper store

Vous devrez entrer votre mot de passe une fois, après quoi il sera stocké dans un dossier à l'intérieur de la racine.

Comme les commentaires l'ont souligné, cela ne fonctionne PAS pour les mots de passe SSH, uniquement pour les mots de passe HTTPS.

Yankee
la source
1
@nim Cela ne signifie pas que vous devriez voter contre la réponse, j'ai suggéré ce qui a fonctionné pour moi, et quelqu'un pourrait trouver cela utile.
Yankee
Ce n'est pas un mot de passe de sauvegarde. Je l'essaye et rien ne résulte. Si vous distant comme ça ssh: // nom @ ip / chemin
nim
1
Cela fonctionne si vous cherchez à stocker le mot de passe d'authentification de base HTTP.
Phil
4
Cela ne fonctionne PAS pour les mots de passe SSH, uniquement pour les mots de passe HTTPS.
Eliezer Berlin
fonctionne bien pour https. Il vous suffit de le taper. La prochaine fois devrait être la dernière fois que vous devez entrer la paraphrase. La prochaine fois, le mot de passe devrait être mémorisé par git.
Jonathan le
7

Votre situation est maintenant réglée, mais pour moi, c'était le fait que j'avais plus d'une clé dans ~/.ssh/

Pour résoudre le problème, j'ai dû créer un fichier appelé ~/.ssh/configet ajouter la ligne:

IdentityFile ~/.ssh/my_key2_rsa

~/.ssh/my_key2_rsaest ma clé.

Mogsdad
la source
1
Merci pour cela, mes fichiers id_rsa et id_rsa.pubont un nom personnalisé, c'est pourquoi git ne le reconnaîtrait jamais. ref: linux.die.net/man/5/ssh_config
lasec0203
5

Je ne sais pas pourquoi personne n'a encore signalé cela. Mais l'approche la plus simple serait d'ajouter simplement une seule ligne AddKeysToAgent yesen haut du fichier .ssh / config. Bien sûr, il ssh-agentdoit être exécuté au préalable. Si ce n'est pas en cours d'exécution (vérifiez par la commande ssh-agentsur le terminal), exécutez-le simplementeval $(ssh-agent)

Je peux confirmer que cela fonctionne, car dans mon projet avec beaucoup de sous-modules et pour chaque sous-module en cours de clonage, j'ai dû taper ma phrase de passe ssh. Après l'astuce ci-dessus, je n'ai plus besoin de le faire.

La source de la solution est /ubuntu/362280/enter-ssh-passphrase-once/853578#853578

infocloggé
la source
C'est absolument la bonne réponse. De plus, pour avoir ssh-agent en cours d'exécution, on peut utiliser un service utilisateur systemd
quelqu'un avec pc