web-dev-qa-db-fra.com

Configurer Git sur SSH pour vous connecter une fois

J'ai cloné mon référentiel git sur ssh. Ainsi, chaque fois que je communique avec le maître d’origine en appuyant ou en tirant, je dois ressaisir mon mot de passe. Comment puis-je configurer git pour ne pas avoir à entrer mon mot de passe plusieurs fois?

183
reprogrammer

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

(Ok, répondant à la question mise à jour, vous exécutez d’abord ssh-keygen pour générer une clé publique et privée sous la forme Jefromiexpliqué . Vous mettez la clé publique sur le serveur Vous devez utiliser un mot de passe si vous ne possédez pas l'équivalent d'un mot de passe en texte brut dans votre clé privée, mais vous avez besoin de façon pratique ssh-agent comme expliqué ci-dessous.)

Vous voulez exécuter 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 et une seule fois, afin de donner à l’agent votre phrase secrète, de décoder votre clé. L'agent reste alors en mémoire avec votre clé déverrouillée et chargée, prête à être utilisée à chaque fois que vous ssh.

Toutes les commandes de la famille ssh1 consultera alors l'agent et pourra automatiquement utiliser votre clé privée.

Sur OSX (err, macOS ), les systèmes 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 Windows où cela 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 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 invoquerez (ultérieurement) ssh-add ou ssh, les deux auront accès à l'agent car ils ont tous les variables d'environnement avec des noms de chemin de socket magique ou autre.

Vous pouvez également exécuter l'agent en tant qu'enfant ordinaire, enregistrer les paramètres d'environnement dans un fichier et le générer dans chaque shell au démarrage.

Mes systèmes OSX et Ubuntu effectuant automatiquement la configuration du lancement de l'agent, il ne me reste plus qu'à exécuter ssh-add une fois. 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, c'est pourquoi 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 et les exportations des variables d'environnement. Ce qui précède tente d’alimenter le fichier .agent, puis de ps(1) l’agent. Si cela ne fonctionne pas, il démarre un agent et crée un nouveau fichier d'agent. Vous pouvez également simplement exécuter ssh-add et, en cas d'échec, démarrez un agent.


1. Et même local et distant Sudo avec l’extension pam appropriée.
97
DigitalRoss

Avait un problème similaire avec le GitHub parce que j'utilisais le protocole HTTPS. Pour vérifier le protocole que vous utilisez, lancez simplement

git config -l

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

git config remote.Origin.url [email protected]:your_username/your_project.git
277
Muein Muzamil

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 vierge) pour créer une paire de clés. Ensuite, vous copiez la clé publique sur la destination distante avec ssh-copy-id. À moins que vous n'ayez besoin de plusieurs clés (par exemple une clé plus sûre avec une phrase secrète à d'autres fins) ou que vous ayez des activités vraiment étranges à identités multiples, 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 phrases secrètes, 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à une pour vous).

23
Cascabel

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

enter image description here

21
Zorayr

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

git config --global credential.helper cache

puis

git config --global credential.helper 'cache --timeout=2592000'
  • timeout = 2592000 (30 jours en secondes) pour permettre la mise en cache pendant 30 jours (ou quelle que soit la suite choisie).

  • Maintenant, lancez une simple commande git qui requiert votre nom d’utilisateur et votre mot de passe.

  • Entrez vos informations d'identification une fois. La mise en cache est activée pendant 30 jours.

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

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

Remarque : Vous avez besoin de Git 1.7.10 ou d'une version plus récente pour utiliser l'aide à l'authentification. Au redémarrage du système, il se peut que nous devions ressaisir le mot de passe.

11
Nishant Thapliyal

Étendre les pensées de Muein pour ceux qui préfèrent éditer des fichiers directement plutôt que d'exécuter des commandes dans git-bash ou terminal.

Allez dans le répertoire .git de votre projet (racine du projet sur votre machine locale) et ouvrez le fichier 'config'. Puis 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 = [email protected]:<username>/<projectname>.git
7
uchamp

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 entre 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 de sshd).

Vous pouvez éviter de mettre ce mot de passe à l'aide de certificats. Avec les certificats, vous devez encore 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 données par steveth45:

Avec authentification par clé publique .

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

La façon exacte dont vous faites cela dépend de Unix contre Windows, mais vous devez essentiellement exécuter ssh-agent en arrière-plan lorsque vous vous connectez, puis lors de votre première connexion, exécutez ssh-add pour donner à l'agent votre phrase secrète. Toutes les commandes de la famille ssh consulteront alors l'agent et récupéreront 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 mettre le mot de passe des certificats sur chaque nouveau shell. Et puis le certificat est "chargé" et vous pouvez l'utiliser pour vous authentifier auprès d'un serveur ssh sans mettre aucun type de mot de passe. Mais c'est sur ce Shell en particulier.

Avec troussea 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 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, puis le stocke de manière sécurisée pour ne plus vous demander.

6
Gaston
ssh-keygen -t rsa

Quand on vous demande une phrase secrète, laissez-la vide, appuyez simplement sur Entrée. aussi simple que cela!!

4

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/

4
Miles

Essayez ceci dans la boîte que vous poussez

    ssh [email protected]

Vous devriez alors obtenir une réponse bienvenue de github et tout ira bien pour Push ensuite.

3
toonsend

J'ai dû cloner un dépôt Git à partir d'un serveur qui n'autorisait pas la connexion avec la clé de connexion, mais uniquement avec un utilisateur/mot de passe. Je n'ai trouvé aucun moyen de configurer le plugin Git pour utiliser une simple combinaison utilisateur/mot de passe. J'ai donc ajouté la commande Shell suivante en tant qu'étape de pré-construction sur une machine de compilation Linux qui dépend de l'outil attendu (apt-get install expect):

CECI IS N'EST PAS UN BON MOYEN DE RÉSOUDRE CE PROBLÈME PAR VOTRE MOT DE PASSE IS AFFICHÉ EN TEXTE CLAIR DANS LA CONFIGURATION ET LES JOURNAUX DU TRAVAIL JENKINS! NE L'UTILISEZ QUE SI IL N'Y A IS PAS DE MOYEN DE CONFIGURER L'AUTHENTIFICATION RSA-KEY OR 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'
2
Jan

Ajoutez une seule ligne AddKeysToAgent yes en haut du fichier .ssh/config. Ofcourse ssh-agent doit être en cours d'exécution au préalable. S'il n'est pas en cours d'exécution (vérifiez par prep ssh-agent), exécutez-le simplement eval $(ssh-agent)

Désormais, la clé est chargée dans la mémoire dans tout le système et vous ne devez plus taper le mot de passe complexe.

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

1
infoclogged

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 était de modifier mon fichier .profile, de sorte que j'entre mon mot de passe composé 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 cela je tape mon mot de passe une fois dans une session ..

0
David Blay