web-dev-qa-db-fra.com

Exécution de l'agent SSH lors du démarrage 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 commence une nouvelle bash git.

Est-il possible de définir l'agent ssh de manière permanente? Ou bien Windows a-t-il un bon moyen de gérer les clés SSH?

Je suis un nouveau gars, donnez-moi un tutoriel détaillé, merci!

107
zchholmes

Dans une session git bash, vous pouvez ajouter un script à ~/.profile ou ~/.bashrc ( ~ ÉTANT GÉNÉRALEMENT DÉFINI SUR %USERPROFILE% ), afin que ladite session puisse lancer automatiquement le ssh-agent. Si le fichier n'existe pas, créez-le simplement.

C’est ce que décrit GitHub dans " Utilisation de phrases secrètes de clé SSH ".

La section " Lancement automatique de ssh-agent sur Git for Windows " 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 code. Voir l'article de GitHub pour connaître 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:

" Amener ssh-agent à fonctionner avec git lancé à partir de la commande windows Shell " a un script similaire, mais je ferais référence à l'article de GitHub ci-dessus, qui est plus robuste et à jour.

105
VonC

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

1) Mettez à jour votre .bashrc en 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) Puis exécutez $ source ~/.bashrc pour recharger votre configuration. 

Les étapes ci-dessus ont été prises à partir 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'est pas présent. 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 à l'aide de la commande $ ssh-add ~/.ssh/id_work_gmail et vous devriez alors pouvoir vous connecter à votre compte github ou à votre hôte distant à l'aide de ssh. Par exemple dans le contexte des exemples de code ci-dessus:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

ou

$ ssh <USER>@csexperimental.abc.com

Cet ajout de clé à l'agent SSH ne devrait ê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 que vous quittez à nouveau toutes les consoles Bash, démarrez une nouvelle console et essayez de passer en SSH sur votre hôte Github ou un autre hôte configuré dans le fichier de configuration SSH. pas.

Remarque:

Merci.

20
Jignesh Gohel

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).

5
Alasdair

Comme je n'aime pas utiliser PuTTY dans Windows comme solution de contournement, j'ai créé un utilitaire très simple ssh-agent-wrapper . Il analyse vos dossiers .ssh et ajoute toutes vos clés à l'agent. Vous devez simplement le placer dans le dossier de démarrage de Windows pour que cela fonctionne.

Hypothèses:

  • ssh-agent dans le chemin
  • shh-add in path (les deux en choisissant l’option "RED" lors de l’installation de git
  • les clés privées se trouvent dans le dossier% USERPROFILE% /. ssh
  • les noms de clés privées commencent par id (par exemple, id_rsa)
2
Erez A. Korn

Créez un nouveau fichier .bashrc dans votre répertoire ~.

Là vous pouvez mettre vos commandes que vous voulez exécuter à chaque démarrage de la bash

0
user2711262

Solution simple en deux chaînes de cette réponse :

Pour sh, bash, etc:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Pour csh, tcsh, etc:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
0
oklas