Configurer Git sur SSH pour se connecter une fois

J’ai cloné mon repository git sur ssh. Donc, chaque fois que je communique avec le maître d’origine en poussant ou en tirant, je dois ressaisir mon mot de passe. Comment puis-je configurer git pour ne pas avoir à saisir mon mot de passe plusieurs fois?

Essayez ssh-add , vous avez besoin de ssh-agent pour exécuter votre clé privée

(Ok, répondant à la question mise à jour, vous lancez d’abord ssh-keygen pour générer une clé publique et privée comme Jefromi l’a expliqué . Vous mettez la clé publique sur le serveur. Vous devez utiliser une phrase secrète si vous ne possédez pas l’équivalent d’un mot de passe en clair dans votre clé privée, mais lorsque vous le faites, vous avez besoin de ssh-agent comme expliqué ci-dessous.)

Vous voulez exécuter ssh-agent en arrière-plan lorsque vous vous connectez. Une fois connecté, l’idée est d’exécuter ssh-add une seule fois, afin de donner à l’agent la phrase secrète pour décoder votre clé. L’agent se trouve alors juste en mémoire avec votre clé déverrouillée et chargée, prête à être utilisée à chaque fois que vous ssh quelque part.

Toutes les commandes ssh-family 1 consulteront alors l’agent et pourront automatiquement utiliser votre clé privée.

Sur les systèmes OSX (err, macOS ), GNOME et KDE, ssh-agent est généralement lancé automatiquement pour vous. Je vais passer en revue les détails au cas où, comme moi, vous avez également un environnement Cygwin ou autre environnement Windows, ce qui n’est certainement pas fait pour vous.

Commencez ici: man ssh-agent .

Il existe différentes manières d’exécuter automatiquement l’agent. Comme l’explique la page de manuel, vous pouvez l’exécuter pour qu’il soit parent de tous les autres processus de votre session de connexion. De cette manière, les variables d’environnement fournies seront automatiquement présentes dans tous vos shells. Lorsque vous invoquerez (plus tard) ssh-add ou ssh deux auront access à l’agent car ils ont tous les variables d’environnement avec des chemins d’access de socket magique.

Vous pouvez également exécuter l’agent en tant qu’enfant ordinaire, enregistrer les parameters d’environnement dans un fichier et générer ce fichier dans chaque shell lorsqu’il démarre.

Mes systèmes OSX et Ubuntu font automatiquement la configuration de lancement de l’agent, donc tout ce que j’ai à faire est de lancer une fois ssh-add . Essayez de lancer ssh-add et voyez si cela fonctionne, si c’est le cas, il vous suffit de le faire une fois par redémarrage.

Mon système Cygwin en avait besoin manuellement, alors je l’ai fait dans mon .profile et j’ai un .bashrc .profile .bashrc :

 . .agent > /dev/null ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || { ssh-agent > .agent . .agent > /dev/null } 

Le fichier .agent est créé automatiquement par le script; il contient les définitions de variables d’environnement et les exportations. Le message ci-dessus tente de générer le fichier .agent, puis essaie de créer l’agent ps(1) . Si cela ne fonctionne pas, il démarre un agent et crée un nouveau fichier d’agent. Vous pouvez aussi simplement exécuter ssh-add et, en cas d’échec, démarrer un agent.


1. Et même sudo local et distant avec la bonne extension de pam.

J’ai eu un problème similaire avec le GitHub parce que j’utilisais le protocole HTTPS. Pour vérifier quel protocole vous utilisez, exécutez simplement

 git config -l 

et regardez la ligne commençant par remote.origin.url . Pour changer de protocole

 git config remote.origin.url git@github.com:your_username/your_project.git 

Ceci concerne la configuration de ssh, pas de git. Si vous ne l’avez pas déjà fait, vous devez utiliser ssh-keygen (avec une phrase secrète vide) pour créer une paire de clés. Ensuite, vous copiez la clé publique vers la destination distante avec ssh-copy-id . À moins que vous ayez besoin de plusieurs clés (par exemple, une clé plus sécurisée avec une phrase secrète à d’autres fins) ou que vous ayez des trucs à identité multiple vraiment bizarres, c’est aussi simple que cela:

 ssh-keygen # enter a few times to accept defaults ssh-copy-id -i ~/.ssh/id_rsa user@host 

Edit: Vous devriez vraiment lire la réponse de DigitalRoss, mais: si vous utilisez des clés avec des mots de passe, vous devrez utiliser ssh-add pour les append à ssh-agent (et bien évidemment démarrer un ssh-agent si votre dissortingbution n’en a pas déjà un pour vous).

Assurez-vous que lorsque vous avez cloné le référentiel, vous l’avez fait avec l’URL SSH et non HTTPS; Dans la zone URL du clone du repository, choisissez le protocole SSH avant de copier l’URL. Voir l’image ci-dessous:

entrer la description de l'image ici

Extension des idées de Muein pour ceux qui préfèrent éditer des fichiers directement sur des commandes en cours d’exécution dans git-bash ou terminal.

Accédez au répertoire .git de votre projet (racine du projet sur votre ordinateur local) et ouvrez le fichier ‘config’. Ensuite, recherchez [remote “origin”] et définissez la configuration de l’URL comme suit:

 [remote "origin"] #the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc. url = git@github.com:/.git 

Je pense qu’il y a deux choses différentes ici. La première est que l’authentification SSH normale nécessite que l’utilisateur mette le mot de passe du compte (où le mot de passe du compte sera authentifié selon différentes méthodes, en fonction de la configuration sshd).

Vous pouvez éviter de mettre ce mot de passe en utilisant des certificates. Avec les certificates, vous devez toujours mettre un mot de passe, mais cette fois-ci est le mot de passe de votre clé privée (indépendant du mot de passe du compte).

Pour ce faire, vous pouvez suivre les instructions de steveth45:

Avec l’authentification par clé publique .

Si vous voulez éviter de mettre le mot de passe du certificate à chaque fois, vous pouvez utiliser ssh-agent, comme indiqué par DigitalRoss.

La façon exacte de procéder dépend d’Unix et de Windows, mais vous devez essentiellement exécuter ssh-agent en arrière-plan lorsque vous vous connectez, puis la première fois que vous vous connectez, exécutez ssh-add pour donner à l’agent la phrase secrète. Toutes les commandes ssh-family consultent alors l’agent et récupèrent automatiquement votre phrase secrète.

Commencez ici: man ssh-agent.

Le seul problème de ssh-agent est que, sur * nix au moins, vous devez placer le mot de passe des certificates sur chaque nouveau shell. Et puis le certificate est “chargé” et vous pouvez l’utiliser pour vous authentifier sur un serveur ssh sans mettre aucun type de mot de passe. Mais c’est sur ce shell particulier.

Avec le trousseau, vous pouvez faire la même chose que ssh-agent mais “à l’échelle du système”. Une fois que vous allumez votre ordinateur, vous ouvrez un shell et mettez le mot de passe du certificate. Et ensuite, chaque autre shell utilisera ce certificate “chargé” et votre mot de passe ne sera plus jamais demandé tant que vous n’aurez pas redémarré votre PC.

Gnome possède une application similaire, appelée Gnome Keyring, qui demande le mot de passe de votre certificate la première fois que vous l’utilisez, puis le stocke de manière sécurisée pour que vous ne le demandiez plus.

Si vous utilisez github, ils ont un très bon tutoriel qui l’explique plus clairement (du moins pour moi).

http://help.github.com/set-up-git-redirect/

Si vous avez cloné avec HTTPS (recommandé) alors: –

 git config --global credential.helper cache 

et alors

 git config --global credential.helper 'cache --timeout=2592000' 
  • timeout = 2592000 (30 jours en secondes) pour activer la mise en cache pendant 30 jours (ou les suites de votre choix).

  • Exécutez maintenant une commande git simple qui nécessite votre nom d’utilisateur et votre mot de passe.

  • Entrez vos informations d’identification une fois et maintenant la mise en cache est activée pendant 30 jours.

  • Réessayez avec n’importe quelle commande git et maintenant vous n’avez plus besoin d’informations d’identification.

  • Pour plus d’informations: – Mise en cache de votre mot de passe GitHub dans Git

Remarque : vous devez utiliser Git 1.7.10 ou une version plus récente pour utiliser l’assistant d’identification. Au redémarrage du système, il se peut que nous devions entrer le mot de passe à nouveau.

 ssh-keygen -t rsa 

Lorsque vous êtes invité à saisir une phrase secrète, laissez-la vide, c’est-à-dire appuyez simplement sur Entrée. aussi simple que cela!!

Essayez ceci à partir de la boîte à partir de laquelle vous poussez

  ssh git@github.com 

Vous devriez alors recevoir une réponse de bienvenue de la part de github et vous pourrez alors pousser.

J’ai essayé d’éviter de taper la phrase secrète tout le temps aussi parce que j’utilise ssh sur windows. Ce que j’ai fait a été de modifier mon fichier .profile, de sorte que je rentre ma phrase secrète dans une session particulière. Donc c’est le morceau de code:

  SSH_ENV="$HOME/.ssh/environment" # start the ssh-agent function start_agent { echo "Initializing new SSH agent..." # spawn ssh-agent ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV" echo succeeded chmod 600 "$SSH_ENV" . "$SSH_ENV" > /dev/null ssh-add } # test for identities function test_identities { # test whether standard identities have been added to the agent already ssh-add -l | grep "The agent has no identities" > /dev/null if [ $? -eq 0 ]; then ssh-add # $SSH_AUTH_SOCK broken so we start a new proper agent if [ $? -eq 2 ];then start_agent fi fi } # check for running ssh-agent with proper $SSH_AGENT_PID if [ -n "$SSH_AGENT_PID" ]; then ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null if [ $? -eq 0 ]; then test_identities fi # if $SSH_AGENT_PID is not properly set, we might be able to load one from # $SSH_ENV else if [ -f "$SSH_ENV" ]; then . "$SSH_ENV" > /dev/null fi ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null if [ $? -eq 0 ]; then test_identities else start_agent fi fi 

donc avec ceci je tape ma phrase une fois dans une session ..

J’ai dû cloner un repository git à partir d’un serveur qui ne permettait pas la connexion en utilisant la clé ssh mais uniquement avec un utilisateur / mot de passe. Je n’ai trouvé aucun moyen de configurer le plug-in Git pour utiliser une combinaison utilisateur / mot de passe simple. J’ai donc ajouté la commande shell suivante comme étape de pré-génération sur une machine Linux qui dépend de l’outil prévu (apt-get install):

CECI N’EST PAS UNE BONNE MANIÈRE DE RÉSOUDRE CE PROBLÈME COMME VOTRE MOT DE PASSE EST PRÉSENTÉ EN TANT QUE TEXTE CLAIR DANS LA CONFIGURATION ET LES JOURNAUX DU TRAVAIL JENKINS! UTILISEZ-LE UNIQUEMENT SI VOUS NE POUVEZ PAS CONFIGURER UNE AUTHENTIFICATION RSA-KEY OU D’AUTRES POSSIBILITES DE CONFIGURATION!

 rm -rf $WORKSPACE && expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof' 

Ajoutez une seule ligne AddKeysToAgent yes en haut du fichier .ssh / config. Bien sûr, ssh-agent doit être exécuté au préalable. Si ce n’est pas en cours d’exécution (vérifier avec prep ssh-agent ), alors lancez simplement eval $(ssh-agent)

Maintenant, la clé est chargée dans tout le système dans la mémoire et vous n’avez plus besoin de saisir la phrase secrète.

La source de la solution est https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578

J’ai essayé toutes ces suggestions et plus encore, juste pour pouvoir cloner depuis mon instance AWS. Rien n’a fonctionné. J’ai finalement sortingché en désespoir de cause: j’ai copié le contenu de id_rsa.pub sur ma machine locale et je l’ai ajouté à ~ / .ssh / known_hosts sur mon instance AWS.