Configurer Git sur SSH pour se connecter une fois
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. 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
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).
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:
é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
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:
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.
Si vous utilisez github, ils ont un très bon tutoriel qui explique plus clairement (au moins pour moi).
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.
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!!
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.
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..
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'
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
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.