Configurer Git sur SSH pour se connecter une fois

j'ai cloné mon dépôt git sur ssh. Donc, chaque fois que je communique avec le maître d'origine en poussant ou en tirant, je dois rentrer mon mot de passe. Comment puis-je configurer git pour ne pas avoir à entrer mon mot de passe plusieurs fois?

168
demandé sur pbonnefoi 2009-10-20 20:27:27

14 réponses

Try ssh-add , vous avez besoin de ssh-agent pour courir et tenir votre clé privée

(Ok, en réponse à la question mise à jour, vous lancez d'abord ssh-keygen pour générer une clé publique et privée comme Jefromi expliqué . Vous mettez la clé publique sur le serveur. Vous devez utiliser une phrase de passe, si vous n'avez pas l'équivalent d'un mot de passe en clair dans votre clé privée. Mais quand vous le faites, alors vous avez besoin comme un question pratique ssh-agent comme expliqué ci-dessous.)

vous voulez lancer ssh-agent en arrière-plan lorsque vous vous connectez. Une fois que vous vous connectez, l'idée est d'exécuter ssh-add une fois et une seule fois, afin de donner votre phrase de passe à l'agent, pour décoder votre clé. L'agent s'assoit alors dans la mémoire avec votre clé déverrouillée et chargée, prête à utiliser chaque fois que vous ssh quelque part.

Tous les ssh-famille de commandes 1 sera alors consulter l'agent et automatiquement être en mesure d'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 dans le cas, comme moi, vous avez également un Cygwin ou d'autres environnements windows où ce n'est certainement pas fait pour vous.

commence ici: man ssh-agent .

Il y a plusieurs façons d'exécuter automatiquement le agent. Comme l'explique la page de manuel, vous pouvez l'Exécuter pour qu'il soit le parent de tous les autres processus de votre session de connexion. De cette façon, les variables d'environnement qu'il fournit seront automatiquement dans tous vos shells. Lorsque vous (plus tard) invoquez ssh-add ou ssh , tous les deux auront accès à l'agent parce qu'ils ont tous les variables d'environnement avec les noms de chemin magic socket ou n'importe quoi d'autre.

alternativement, vous pouvez exécuter l'agent comme un enfant ordinaire, sauver l'environnement les paramètres dans un fichier, et la source que le fichier dans chaque shell quand il commence.

mes systèmes OSX et Ubuntu font automatiquement la configuration de lancement de l'agent, donc tout ce que j'ai à faire est d'exécuter ssh-add une fois. Essayez d'exécuter ssh-add et voir si cela fonctionne, si oui, alors vous avez juste besoin de le faire une fois par redémarrer.

mon système Cygwin avait besoin qu'il soit fait manuellement, donc je l'ai fait dans mon .profile et j'ai .bashrc source .profile :

. .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 des variables d'environnement et les exportations. Au-dessus de la tente de la source .agent file, puis essaie de ps(1) l'agent. S'il ne fonctionne pas, il démarre un agent et crée un nouveau fichier d'agent. Vous pouvez aussi simplement lancer ssh-add et si elle échoue démarrez un agent.


1. Et même local et à distance sudo avec le droit pam extension.
86
répondu DigitalRoss 2017-05-23 11:54:51

avait un problème similaire avec le GitHub parce que j'utilisais le protocole HTTPS. Pour vérifier quel protocole vous utilisez, Lancez

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
256
répondu Muein Muzamil 2018-02-20 13:22:28

il s'agit de configurer ssh, pas git. Si vous ne l'avez pas déjà fait, vous devez utiliser ssh-keygen (avec une phrase de passe vierge) pour créer une paire de clés. Ensuite, vous copiez la clé publique de la destination éloignée avec ssh-copy-id . Sauf si vous avez besoin de plusieurs clés (par exemple une plus sûre avec une phrase de passe à d'autres fins) ou que vous avez des trucs vraiment bizarres de multi-identité en cours, 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 touches avec des mots de passe, vous devrez utiliser ssh-add <key-file> pour les ajouter à ssh-agent (et bien évidemment démarrer un ssh-agent si votre distribution n'en a pas déjà un pour vous).

20
répondu Cascabel 2009-10-20 16:48:11

assurez-vous que lorsque vous avez cloné le dépôt, vous l'avez fait avec L'URL SSH et non avec les HTTPS; dans la boîte D'URL clone du repo, choisissez le protocole SSH avant de copier l'URL. Voir l'image ci-dessous:

enter image description here

20
répondu Zorayr 2013-09-16 08:22:33

étendre les pensé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.

Aller à l' .git dans le répertoire de votre projet (projet de root sur votre machine locale) et ouvrez le fichier 'config'. Ensuite, cherchez [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:<username>/<projectname>.git
7
répondu uchamp 2013-02-07 02:26:02

je pense qu'il y a deux choses différentes ici. La première est que l'authentification SSH normale exige que l'utilisateur place le mot de passe du compte (où le mot de passe du compte sera authentifié par différentes méthodes, selon la configuration de sshd).

vous pouvez éviter de mettre ce mot de passe en utilisant des certificats. Avec des certificats, vous devez encore mettre un mot de passe, mais cette fois est le mot de passe de votre clé privée (qui est indépendant de la le mot de passe).

pour ce faire, vous pouvez suivre les instructions indiquées par steveth45:

Avec L'Authentification Par Clé Publique .

si vous voulez éviter de mettre le mot de passe du certificat à chaque fois, vous pouvez utiliser ssh-agent, comme souligné par DigitalRoss

la façon exacte de faire cela dépend D'Unix vs Windows, mais essentiellement vous avez besoin pour exécuter ssh-agent en arrière-plan lorsque vous vous connectez, puis la première fois que vous vous connectez, Lancez ssh-add pour donner à l'agent votre phrase de passe. Toutes les commandes SSH-family consulteront alors l'agent et récupéreront automatiquement votre phrase de passe.

Commencez ici: man ssh-agent.

le seul problème de ssh-agent est que, sur *nix au moins, vous devez mettre le mot de passe des certificats sur chaque nouveau shell. Et puis le certificat est "chargé" et vous pouvez utilisez-le pour vous authentifier contre un serveur ssh sans mettre de mot de passe. Mais c'est sur cette coquille en particulier.

Avec keychain 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 mettre le mot de passe du certificat. Et puis, tous les autres shell utiliseront ce certificat "chargé" et votre mot de passe ne sera plus jamais demandé jusqu'à ce que vous redémarriez votre PC.

Gnome a une application similaire, appelée Gnome Keyring qui demande le mot de passe de votre Certificat la première fois que vous l'utilisez et puis il stocke en toute sécurité afin que vous ne serez pas demandé à nouveau.

6
répondu Gaston 2012-02-11 03:20:54

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

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

4
répondu Miles 2011-12-16 06:59:44

si vous avez cloné en utilisant HTTPS (recommandé) alors: -

git config --global credential.helper cache

et ensuite

git config --global credential.helper 'cache --timeout=2592000'
  • timeout=2592000 (30 jours en secondes) pour activer la mise en cache pendant 30 jours (ou n'importe quelle suite vous).

  • Lancez maintenant une simple commande git qui nécessite votre nom d'utilisateur et votre mot de passe.

  • inscrivez votre les justificatifs d'identité une fois et maintenant la mise en cache est activée pendant 30 jours.

  • essayez à nouveau avec n'importe quelle commande git et maintenant vous n'avez pas besoin d'accréditation.

  • pour plus d'informations: - Cache votre mot de passe GitHub dans Git

Note : vous avez besoin de Git 1.7.10 ou plus récent pour utiliser l'aide de justificatif. Sur le redémarrage du système, nous pourrait avoir à l'entrer à nouveau le mot de passe.

4
répondu Nishant Thapliyal 2018-03-14 05:28:15
ssh-keygen -t rsa

lorsqu'on vous demande une phrase de passe ,laissez-la en blanc I. e, appuyez sur Entrée. aussi simple que cela!!

3
répondu Srinivas Kattimani 2012-06-08 20:23:31

essayez ceci de la boîte que vous poussez de

    ssh git@github.com

vous devriez alors obtenir une réponse de bienvenue de github et sera très bien de pousser alors.

3
répondu toonsend 2014-01-15 18:00:20

j'essaie d'éviter de taper le mot de passe tout le temps aussi parce que j'utilise ssh sur windows. Ce que j'ai fait a été de modifier mon .fichier de profil, de sorte que j'entre ma phrase de passe un dans une session particulière. Donc voici 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 de passe une fois dans une session..

0
répondu dblay 2013-04-20 09:55:38

j'ai dû cloner un git repo à partir d'un serveur qui n'autorisait pas la clé login life ssh mais seulement avec un utilisateur/mot de passe. Je n'ai trouvé aucun moyen de configurer le Plugin Git pour utiliser une combinaison utilisateur/mot de passe simple, donc j'ai ajouté la commande shell suivante comme étape de pré-construction sur une machine Linux qui dépend de l'outil expect (apt-get install expect):

CE N'EST PAS UNE BONNE FAÇON DE RÉSOUDRE CE PROBLÈME CAR VOTRE MOT DE PASSE EST AFFICHÉ EN TEXTE CLAIR DANS LA CONFIGURATION ET LES JOURNAUX DE LE JENKINS TRAVAIL! NE L'UTILISEZ QUE S'IL N'Y A AUCUN MOYEN DE CONFIGURER L'AUTHENTIFICATION RSA-KEY OU D'AUTRES POSSIBILITÉS 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'
0
répondu Jan 2014-08-29 13:07:42

ajouter une seule ligne AddKeysToAgent yes sur le dessus du .fichier SSH / config. Bien sûr, ssh-agent doit courir à l'avance. Si elle n'est pas en cours d'exécution ( vérifier par prep ssh-agent ), alors il suffit de l'exécuter eval $(ssh-agent)

maintenant, la clé est chargée dans l'ensemble du système dans la mémoire et vous n'avez pas à taper dans la phrase de passe à nouveau.

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

0
répondu infoclogged 2017-08-23 20:58:05

j'ai essayé toutes ces suggestions et plus, juste pour que je puisse git clone de mon instance AWS. Rien n'a fonctionné. J'ai finalement triché en désespoir de cause: j'ai copié le contenu d'id_rsa.pub sur ma machine locale et ajouté à ~/.SSH / known_hosts sur mon instance AWS.

-1
répondu alansendgi 2013-09-22 20:01:33