Pour que ssh-agent fonctionne avec git, exécutez la commande shell de windows.
j'ai installé msysgit, avec OpenSSH. Je me connecte à une gitosis repo. De la Git bash, j'ai créé un .profile
fichier qui fonctionne ssh-agent (si pas déjà en cours d'exécution) à chaque fois que git bash est ouvert, en utilisant ce script
SSH_ENV=$HOME/.ssh/environment
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
echo succeeded
chmod 600 ${SSH_ENV}
. ${SSH_ENV} > /dev/null
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
j'utilise aussi git extensions, qui exécute la commande git depuis L'invite de commande Windows, pas git bash. Donc, ssh ne voit pas l'agent SSH qui court. Est-il possible de résoudre ce problème?
7 réponses
j'ai eu le même problème que toi, alors j'ai essayé d'ajouter ce code
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
dans le fichier .bashrc
dans mon répertoire home. Et ça marche!!!
Pour msysgit vous pourriez avoir à modifier un peu la solution proposée par https://help.github.com/articles/working-with-ssh-key-passphrases
declare -x 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 -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
comme vous pouvez le remarquer, le seul changement que j'ai fait était dans l'appel ps, puisque msysgit n'utilise pas-U mais-u
Même si vous avez probablement résolu... utilisez le eval
commande de faire l' ssh_agent
processus de bâton:
eval `ssh-agent.exe`
puis utilisez ssh-add pour ajouter les touches dont vous avez besoin.
sur Windows 10 cela a fonctionné pour moi
- exécuter git bash
touch ~/.profile
start ~/.profile
ouvrir.profile
- ajouter ce qui suit à
.profile
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
Ceci est basé sur cette réponse. La seule différence est que .bashrc
ne fonctionne pas, au lieu .profile
a fonctionné.
vous pouvez envelopper votre exécutable git avec un script qui génère votre .profile
, provoquant l' ssh-agent
variables d'environnement à charger.
soit mettre un script appelé git
dans un répertoire plus tôt dans votre chemin que le vrai git, ou configurer les extensions git pour appeler votre wrapper à la place du vrai git.
j'ai trouvé que la façon la plus douce d'y arriver était D'utiliser le concours de beauté comme agent SSH et plink.
vous devez avoir une session putty configurée pour le nom d'hôte utilisé dans votre télécommande.
vous aurez aussi besoin de plink.exe qui peut être téléchargé à partir du même site que putty.
et vous avez besoin de concours avec votre clé chargée. J'ai un raccourci vers le concours dans mon dossier de démarrage qui charge ma clé SSH quand je me connecte.
Lorsque vous installez git-scm vous pouvez alors le spécifier pour utiliser tortoise / plink plutôt que OpenSSH.
l'effet net est que vous pouvez ouvrir git-bash chaque fois que vous voulez et push/pull sans être mis au défi pour les mots de passe.
il en est de même pour les sessions putty et WinSCP lorsque la clé du concours est chargée. Il rend la vie beaucoup plus facile (et sûre).
solution simple à deux cordescette réponse:
# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh