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 ressaisir mon mot de passe. Comment configurer git pour ne pas avoir à saisir mon mot de passe plusieurs 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 ressaisir mon mot de passe. Comment configurer git pour ne pas avoir à saisir mon mot de passe plusieurs fois?
Réponses:
ssh-add
, vous devez ssh-agent
exécuter et maintenir 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 comme l' explique Jefromi . Vous mettez la clé publique sur le serveur. Vous devez utiliser une phrase secrète, si vous ne l'avez pas, vous avez l'équivalent d'une plaine -mot de passe texte dans votre clé privée. Mais lorsque vous le faites, vous devez en pratique, comme expliqué ci-dessous.)ssh-agent
Vous souhaitez être exécuté ssh-agent
en arrière-plan lorsque vous vous connectez. Une fois connecté, l'idée est d'exécuter ssh-add
une seule et unique fois, afin de donner à l'agent votre phrase secrète, pour 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 utilisez quelque part.
Toutes les commandes de la famille ssh 1 consulteront alors l'agent et pourront automatiquement utiliser votre clé privée.
Sur OSX (err, macOS ), les systèmes GNOME et KDE ssh-agent
sont généralement lancés automatiquement pour vous. Je vais passer en revue les détails au cas où, comme moi, vous avez également un environnement Cygwin ou d'autres fenêtres 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'elle 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 (plus tard) ssh-add
ou les ssh
deux auront accès à l'agent car ils ont tous les variables d'environnement avec des chemins d'accès 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 source ce fichier dans chaque shell au démarrage.
Mes systèmes OSX et Ubuntu effectuent automatiquement la configuration du lancement de l'agent, donc tout ce que j'ai à faire est de l'exécuter ssh-add
une seule fois. Essayez de courir 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 avait besoin que cela soit fait manuellement, donc je l'ai fait dans mon .profile
et j'ai une .bashrc
source .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
Le .agent
fichier est créé automatiquement par le script; il contient les définitions et les exportations des variables d'environnement. Ce qui précède tente de source le fichier .agent, puis essaie à 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émarrer un agent.
sudo
avec la bonne extension pam.
ssh-agent
il est probablement plus pratique d'utiliser:eval `ssh-agent`
J'ai eu un problème similaire avec le GitHub parce que j'utilisais le protocole HTTPS. Pour vérifier le protocole que 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
Permission denied
erreur.
git remote set-url origin git@github.com:your_username/your_project.git
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 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 n'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 d'identité multiple vraiment étranges, 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 les utiliser ssh-add <key-file>
pour les ajouter ssh-agent
(et évidemment démarrer un ssh-agent
si votre distribution n'en a pas déjà une pour vous).
ssh-agent
car il veut contourner le problème de la phrase de passe à chaque fois. Pas de downvoting mais je pense que vous devez améliorer cette réponse, sauf si je suis celui qui a mal compris ...
ssh-agent
. +1 à vous!
ssh-*
que la phrase secrète appelle pour utiliser la clé - où vous vouliez vraiment dire votre mot de passe utilisateur réel sur la télécommande?
Si vous avez cloné en utilisant 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 activer la mise en cache pendant 30 jours (ou toutes les suites que vous).
Exécutez maintenant une simple commande git qui nécessite votre nom d'utilisateur et votre mot de passe.
Entrez vos informations d'identification une fois et la mise en cache est désormais 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 avez besoin de Git 1.7.10 ou d'une version plus récente pour utiliser l'assistant d'informations d'identification. Au redémarrage du système, nous devrons peut-être saisir à nouveau le mot de passe.
Étendre les pensées de Muein à ceux qui préfèrent éditer les fichiers directement sur les 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 machine locale) et ouvrez le fichier 'config'. Recherchez ensuite [origine "distante] et définissez la configuration d'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
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é par différentes méthodes, selon la configuration de sshd).
Vous pouvez éviter de mettre ce mot de passe à l'aide de certificats. Avec les certificats, vous devez toujours mettre un mot de passe, mais cette fois, c'est le mot de passe de votre clé privée (qui est indépendant du mot de passe du compte).
Pour ce faire, vous pouvez suivre les instructions indiquées par steveth45:
Si vous voulez éviter de mettre le mot de passe du certificat à chaque fois, vous pouvez utiliser ssh-agent, comme l'a souligné DigitalRoss
La façon exacte dont vous procédez dépend d'Unix par rapport à 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 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 de mot de passe. Mais c'est sur cette coquille particulière.
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 certificat. Et puis, chaque autre shell utilisera 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 il le stocke en toute sécurité afin que vous ne soyez plus invité.
AddKeysToAgent yes
en .ssh / config. Ensuite, il est chargé dans la mémoire jusqu'à ce que vous
Si vous utilisez github, ils ont un très bon tutoriel qui l'explique plus clairement (du moins pour moi).
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 depuis la boîte à partir de laquelle vous appuyez
ssh git@github.com
Vous devriez alors obtenir une réponse bienvenue de github et vous pourrez ensuite pousser.
Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.
Mais en quelque sorte git me demande toujours le mot de passe quand j'essaye de pousser
J'ai dû cloner un dépôt git à partir d'un serveur qui n'autorisait pas la clé de connexion vie ssh 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é-génération sur une machine de construction Linux qui dépend de l'outil attendu (apt-get install expect):
CE N'EST PAS UNE BONNE MANIÈRE DE RÉSOUDRE CE PROBLÈME COMME VOTRE MOT DE PASSE EST MONTRÉ COMME UN TEXTE CLAIR DANS LA CONFIGURATION ET LES JOURNAUX DU TRAVAIL JENKINS! UTILISEZ-LE UNIQUEMENT SI IL N'Y A PAS DE MOYEN DE CONFIGURER L'AUTHENTIFICATION PAR CLÉ RSA 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'
Ajoutez une seule ligne AddKeysToAgent yes
en haut du fichier .ssh / config. Bien sûr, ssh-agent doit être en cours d'exécution au préalable. Si ce n'est pas en cours d'exécution (vérifiez par prep ssh-agent
), exécutez-le simplementeval $(ssh-agent)
Maintenant, la clé est chargée à l'échelle du système dans la mémoire et vous n'avez pas besoin de taper à nouveau la phrase secrète.
La source de la solution est /ubuntu/362280/enter-ssh-passphrase-once/853578#853578
J'ai toujours essayé d'éviter de taper la phrase secrète parce que j'utilise ssh sur Windows. Ce que j'ai fait, c'est de modifier mon fichier .profile, afin que j'entre ma phrase secrète dans une session particulière. Voici donc 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 ma phrase de passe une fois dans une session ..
J'ai essayé toutes ces suggestions et plus, juste pour pouvoir git cloner à partir de mon instance AWS. Rien n'a fonctionné. J'ai finalement triché par désespoir: j'ai copié le contenu de id_rsa.pub sur ma machine locale et l'ai ajouté à ~ / .ssh / known_hosts sur mon instance AWS.