193 votes

Exécution de l'agent SSH lors du lancement de Git Bash sous Windows

J'utilise git bash. Je dois utiliser

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

à chaque fois que je démarre un nouveau git bash.

Existe-t-il un moyen de définir l'agent ssh de manière permanente ? Ou est-ce que Windows a un bon moyen pour gérer les clés ssh ?

Je suis un nouveau venu, veuillez me donner un tutoriel détaillé, merci !

175voto

VonC Points 414372

Dans une session git bash, vous pouvez ajouter un script à l'adresse suivante ~/.profile o ~/.bashrc ( avec ~ étant généralement réglé sur %USERPROFILE% ), pour que ladite session se lance automatiquement le ssh-agent . Si le fichier n'existe pas, il suffit de le créer.

C'est ce que décrit GitHub dans " Travailler avec les phrases de passe des clés SSH ".

Le " Lancement automatique de ssh-agent sur Git pour Windows La section " " de cet article contient un script robuste qui vérifie si l'agent est en cours d'exécution ou non. Vous trouverez ci-dessous un extrait de ce script. Consultez l'article de GitHub pour la solution complète.

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

Autres ressources :

" Faire fonctionner ssh-agent avec git exécuté depuis le shell de commande Windows " dispose d'un script similaire, mais je me référerais principalement à l'article GitHub ci-dessus, qui est plus robuste et à jour.

35voto

Jignesh Points 644

P.S : Ces instructions sont dans le contexte d'un shell Bash ouvert dans le sous-système Linux de Windows 10 et ne mentionnent pas la liaison symétrique des clés SSH générées dans Windows avec Bash dans Ubuntu sous Windows.

1) Mettez à jour votre .bashrc en y ajoutant ce qui suit

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) Ensuite, exécutez $ source ~/.bashrc pour recharger votre configuration.

Les étapes ci-dessus sont tirées de https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch

3) Créez un fichier de configuration SSH, s'il n'existe pas. Utilisez la commande suivante pour en créer un nouveau : .ssh$ touch config

4) Ajouter ce qui suit à ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) Ajoutez votre clé à l'agent SSH en utilisant la commande $ ssh-add ~/.ssh/id_work_gmail et vous devriez pouvoir vous connecter à votre compte github ou à votre hôte distant en utilisant ssh. Par exemple, dans le contexte des exemples de code ci-dessus :

$ ssh github.com-<YOUR_GITHUB_USERNAME>

ou

$ ssh <USER>@csexperimental.abc.com

L'ajout de la clé à l'agent SSH ne doit être effectué qu'une seule fois.

6) Maintenant, déconnectez-vous de votre session Bash sur le sous-système Windows-Linux, c'est-à-dire quittez à nouveau toutes les consoles Bash et démarrez à nouveau une nouvelle console. Essayez de vous connecter en SSH à votre hôte Github ou à un autre hôte tel que configuré dans le fichier de configuration SSH et cela devrait fonctionner sans aucune étape supplémentaire.

Note :

Gracias.

10voto

Si l'objectif est de pouvoir pousser vers un dépôt GitHub quand vous le souhaitez, alors sous Windows, dans la rubrique C:\Users\tiago\.ssh où les clés sont stockées (du moins dans mon cas), créez un fichier nommé config et ajoutez-y ce qui suit

Host github.com
    HostName github.com
    User your_user_name
    IdentityFile ~/.ssh/your_file_name

Ensuite, il suffit d'ouvrir Git Bash et vous serez en mesure de pousser sans avoir à démarrer manuellement l'agent ssh et à ajouter la clé.

7voto

Alasdair Points 91

J'ai trouvé que le moyen le plus simple d'y parvenir était d'utiliser Pageant comme agent SSH et plink.

Vous devez avoir une session putty configurée pour le nom d'hôte qui est utilisé dans votre télécommande.

Vous aurez également besoin de plink.exe qui peut être téléchargé sur le même site que putty.

Et vous avez besoin que Pageant fonctionne avec votre clé chargée. J'ai un raccourci de Pageant dans mon dossier de démarrage qui charge ma clé SSH quand je me connecte.

Lorsque vous installez git-scm, vous pouvez alors lui spécifier d'utiliser tortoise/plink plutôt qu'OpenSSH.

L'effet net est que vous pouvez ouvrir git-bash quand vous le souhaitez et faire du push/pull sans avoir à fournir de phrase de passe.

Il en va de même pour les sessions putty et WinSCP lorsque pageant a votre clé chargée. Cela rend la vie beaucoup plus facile (et plus sûre).

5voto

Amanda G. Brown Points 53

Je n'ai pas réussi à faire fonctionner le système à partir de la meilleure réponse, probablement parce que je suis un noob de l'informatique et que j'ai manqué quelque chose d'évident. Mais juste pour info, au cas où cela aiderait quelqu'un d'aussi déficient que moi, ce qui a ENFIN fonctionné, c'est l'un des liens suivants aquí (référencés dans les réponses). Il s'agissait simplement de coller le texte suivant dans mon .bash_profile :

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

J'ai probablement configuré quelque chose de bizarre, mais je n'ai pas réussi à l'ajouter à mon .profile o .bashrc . L'autre vrai problème que j'ai rencontré est que je ne suis pas un administrateur sur cet ordinateur et que je ne peux pas modifier les variables d'environnement sans l'approbation du service informatique.

Vous savez que cela fonctionne si votre mot de passe ssh vous est demandé lorsque vous ouvrez git bash. Alléluia, quelque chose a finalement fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X