J'ai installé msysgit avec OpenSSH. Je me connecte à un repo gitosis. Depuis git bash, j'ai créé un fichier .profile
qui exécute ssh-agent (s'il n'est pas déjà en cours d'exécution) à chaque ouverture de git bash, à l'aide de 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 également des extensions git, qui exécutent la commande git à partir de l'invite de commande Windows, et non pas git bash. Ainsi, ssh ne voit pas le ssh-agent en cours d'exécution. Est-il possible de réparer ça?
J'ai eu le même problème que vous, alors j'ai essayé d'ajouter ce code
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
dans le fichier .bashrc
de mon répertoire personnel. Et il fonctionne!
Pour msysgit, vous devrez peut-être légèrement modifier 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 le remarquerez peut-être, le seul changement que j'ai apporté concerne l'appel ps, car msysgit n'utilise pas -U mais -u.
Même si vous l'avez probablement déjà résolu, utilisez la commande eval
pour rendre le processus ssh_agent
conforme:
eval `ssh-agent.exe`
Ensuite, utilisez ssh-add pour ajouter les clés dont vous avez besoin.
Sur Windows 10 cela a fonctionné pour moi
touch ~/.profile
start ~/.profile
pour ouvrir .profile
.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
n'a pas fonctionné, mais que .profile
a fonctionné.
Vous pouvez encapsuler votre exécutable git avec un script qui source votre .profile
, entraînant le chargement des variables d'environnement ssh-agent
.
Placez un script appelé git
dans un répertoire situé plus tôt dans votre chemin que le véritable git ou configurez les extensions git pour appeler votre wrapper à la place du véritable git.
J'ai trouvé que le moyen le plus simple d'y parvenir consistait à utiliser Pageant 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 également besoin de plink.exe, qui peut être téléchargé à partir du même site que PuTTY.
Et vous avez besoin de Pageant en cours d'exécution avec votre clé chargée. J'ai un raccourci vers pageant dans mon dossier de démarrage qui charge ma clé SSH lorsque je me connecte.
Lorsque vous installez git-scm, vous pouvez ensuite le spécifier pour qu'il utilise tortoise/plink plutôt que OpenSSH.
L’effet net est que vous pouvez ouvrir git-bash quand vous le souhaitez et pousser/tirer sans être contesté pour les mots de passe.
Il en va de même avec les sessions PuTTY et WinSCP lorsque pageant a votre clé chargée. Cela rend la vie beaucoup plus facile (et sécurisée).
Solution simple en deux chaînes de cette réponse :
# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh