Si vous utilisez SSH et votre clé privée est cryptée avec un mot de passe, alors vous serez toujours invité à entrer le mot de passe / mot de passe pour la clé privée lorsque vous effectuez des opérations de réseau avec Git comme push
, pull
et fetch
.
Utilisez ssh-agent pour enregistrer les informations d'identification de mot de passe / mot de passe de clé privée
Si vous voulez éviter d'avoir à saisir votre mot de passe à chaque fois, vous pouvez utiliser ssh-agent
pour stocker vos informations d'identification de mot de passe de clé privée une fois par session de terminal, comme je l'explique dans ma réponse à Impossible d'ouvrir une connexion avec votre agent d'authentification :
$ eval `ssh-agent -s`
$ ssh-add
Dans un Bash msysgit Windows, vous devez évaluer la sortie de ssh-agent
, mais je ne sais pas si vous devez faire de même dans d'autres environnements de développement et systèmes d'exploitation.
ssh-add
recherche une clé privée dans votre .ssh
dossier de départ appelée id_rsa
, qui est le nom par défaut, mais vous pouvez passer un chemin de fichier à une clé avec un nom différent.
Tuer l'agent
Lorsque vous avez terminé votre session de terminal, vous pouvez arrêter ssh-agent
avec le drapeau d' arrêt -k
:
$ ssh-agent -k
Comme expliqué dans le ssh-agent
manuel :
-k
Tuez l'agent actuel (donné par la variable d'environnement SSH_AGENT_PID).
Délai d'expiration facultatif
En outre, il peut prendre un paramètre de délai d'expiration facultatif comme ceci:
$ ssh-add -t <timeout>
où <timeout>
est le format <n>h
des <n>
heures, <n>m
pour <n>
minutes, et ainsi de suite.
Selon le ssh-agent
manuel :
-t life
Définissez une valeur par défaut pour la durée de vie maximale des identités ajoutées à l'agent. La durée de vie peut être spécifiée en secondes ou dans un format d'heure spécifié dans sshd_config (5) . Une durée de vie spécifiée pour une identité avec ssh-add (1) remplace cette valeur. Sans cette option, la durée de vie maximale par défaut est indéfiniment.
Voir cette page pour plus de formats d'heure .
Avertissement de sécurité pour les utilisateurs de Cygwin
Les utilisateurs de Cygwin doivent être conscients d'un risque potentiel de sécurité lié à l'utilisation de ssh-agent dans Cygwin :
les gens devraient être conscients des dangers potentiels de ssh-agent sous Cygwin 1 , bien que sous un netstat local et un scan de port distant, il ne semble pas que le port spécifié dans / tmp / ssh-foo soit accessible à tous ...?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
Et au lien cité :
cependant, notez que les sockets de domaine Unix de Cygwin sont FONDAMENTALEMENT INSÉCURES et donc je DÉCOURAGE fortement l' utilisation de ssh-agent sous Cygwin.
lorsque vous exécutez ssh-agent sous Cygwin, il crée un socket AF_UNIX dans le /tmp/ssh-$USERNAME/
répertoire. Sous Cygwin, les sockets AF_UNIX sont émulés via les sockets AF_INET. Vous pouvez facilement voir cela si vous regardez un /tmp/ssh-$USERNAME/agent-socket-*
fichier via le Bloc-notes. Vous verrez quelque chose comme
!<socket >2080
alors cours netstat -a
et surprends! Vous avez un programme qui écoute le port 2080. C'est ssh-agent. Lorsque ssh reçoit un défi RSA du serveur, il fait référence au correspondant /tmp/ssh-$USERNAME/agent-socket-*
(sous Cygwin, dans notre cas, cela signifie qu'il ouvrira la connexion localhost:2080
) et demande à ssh-agent de traiter le défi RSA avec la clé privée qu'il possède, puis il transmet simplement la réponse reçue de l'agent ssh au serveur.
Sous Unix, un tel scénario fonctionne sans problème, car le noyau Unix vérifie les autorisations lorsque le programme essaie d'accéder à un socket AF_UNIX. Pour les sockets AF_INET, cependant, les connexions sont anonymes (lire "non sécurisé"). Imaginez que vous ayez l'agent ssh Cygwin en cours d'exécution. Un pirate malveillant peut analyser votre box, localiser le port ouvert utilisé par ssh-agent, ouvrir une connexion à votre serveur SSH, en recevoir le défi RSA, l'envoyer à votre ssh-agent via un port ouvert qu'il a trouvé, recevoir le Réponse RSA, envoyez-la au serveur SSH et le tour est joué, il / elle s'est connecté avec succès à votre serveur comme vous.