it-swarm.com.de

Ssh-agent mit git run über die Windows-Befehlsshell arbeiten lassen

Ich habe msysgit mit OpenSSH installiert. Ich verbinde mich mit einem Gitosis-Repo. Von der git-bash habe ich eine .profile-Datei erstellt, die den ssh-agent (wenn er nicht bereits läuft) jedes Mal ausführt, wenn git-bash geöffnet wird, mit diesem Skript .

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

Ich verwende auch git-Erweiterungen, die den Befehl git über den Windows-Befehl Prompt ausführen und nicht git bash. Der SSH-Agent wird also nicht angezeigt. Kann man das beheben?

32
Jacko

Ich hatte das gleiche Problem wie Sie und versuchte diesen Code hinzuzufügen

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa

in die Datei .bashrc in meinem Heimatverzeichnis. Und es funktioniert!

41
Fery Wardiyanto

Für msysgit müssen Sie möglicherweise die von https://help.github.com/articles/working-with-ssh-key-passphrases angebotene Lösung ein wenig ändern. 

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

Wie Sie vielleicht bemerken, war die einzige Änderung, die ich vorgenommen habe, der Aufruf von ps, da msysgit nicht -U sondern -u verwendet

26
Braiam

Obwohl Sie es wahrscheinlich gelöst haben, verwenden Sie den Befehl eval, um den Prozess ssh_agent zu erstellen:

eval `ssh-agent.exe`

Verwenden Sie dann ssh-add, um die benötigten Schlüssel hinzuzufügen.

22
Cu7l4ss

Unter Windows 10 hat das für mich funktioniert

  1. laufen git bash
  2. touch ~/.profile
  3. start ~/.profile zum Öffnen .profile
  4. füge folgendes zu .profile hinzu
#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa

Dies basiert auf dieser Antwort . Der einzige Unterschied ist, dass .bashrc nicht funktioniert hat, stattdessen .profile.

10
Thoran

Sie könnten Ihre git-Programmdatei mit einem Skript umschließen, das Ihren .profile verwendet, wodurch die ssh-agent-Umgebungsvariablen geladen werden.

Legen Sie entweder ein Skript mit dem Namen git in ein Verzeichnis ein, das sich früher in Ihrem Pfad als der echte Git befindet, oder konfigurieren Sie die Git-Erweiterungen so, dass der Wrapper anstelle des echten Git aufgerufen wird.

1
Andrew Aylett

Der einfachste Weg, dies zu erreichen, war die Verwendung von Pageant als SSH-Agent und Plink.

Sie müssen eine PuTTY-Sitzung für den Hostnamen konfigurieren, der in Ihrer Fernbedienung verwendet wird.

Sie benötigen auch plink.exe, das von derselben Site wie PuTTY heruntergeladen werden kann.

Und Sie brauchen Pageant, wenn Ihr Schlüssel geladen ist. Ich habe in meinem Startordner eine Verknüpfung zum Festlegen, die meinen SSH-Schlüssel lädt, wenn ich mich anmelde.

Wenn Sie git-scm installieren, können Sie es so definieren, dass es Schildkröte/Plink anstelle von OpenSSH verwendet.

Der Nettoeffekt ist, dass Sie Git-bash jederzeit öffnen können und Push/Pull, ohne für Passphrasen herausgefordert zu werden.

Dasselbe gilt für PuTTY- und WinSCP-Sitzungen, wenn der Festzug Ihren Schlüssel geladen hat. Das macht das Leben um einiges einfacher (und sicherer).

1
Alasdair

Einfache Zwei-String-Lösung aus diese Antwort :

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