Wie starte ich den SSH-Agent am besten mit Cygwin?

Wie starte ich den SSH-Agent am besten mit Cygwin?

Ich möchte ssh-agentgestartet werden, wenn ich Cygwin starte, da ich häufig SSH-Passthrough verwende.

Ich habe versucht hinzuzufügen:

eval `ssh-agent.exe`

zu meinem .bashrc, aber jedes Mal, wenn ich Alt-F2ein neues Terminalfenster öffne, .bashrcwird ausgeführt und daher werden neue ssh-agents erstellt, was unerwünscht ist und den Passthrough durcheinander bringt.

Ich habe dann versucht, den Eval-Befehl nach zu verschieben .bash_profile, aber auch dies führt zum selben Problem – ich nehme an, dass jedes neue Terminalfenster als neue Anmelde-Shell betrachtet wird.

Eine dritte Möglichkeit besteht in der Verwendung von cygrunsrv, aber ich habe gerade erst davon erfahren und bin mir nicht sicher, wie ich es für diesen speziellen Zweck verwenden soll und, was vielleicht noch wichtiger ist, wie ich die SSH_AUTH_SOCKund SSH_AGENT_PIDInformationen, von wo der Dienst erstellt wird, an jede neu erstellte Shell weitergebe.

Alle Vorschläge, wie sich dieses Ergebnis am besten erreichen lässt – bei dem ein einzelner SSH-Agent ausgeführt wird und wartet und seine Informationen sofort für die Verwendung in jeder neu geöffneten Shell verfügbar sind – sind willkommen.

Antwort1

Sie können es in Ihren einfügen .bashrc, aber bevor Sie es erneut starten, sollten Sie prüfen, ob es bereits ausgeführt wird. Sie können beispielsweise Folgendes tun:

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

als Teil des Prozesses.

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

Es gibt eine ausführliche Antwort, die vieles davon detailliert beschreibtHierauf der U&L-Site.

Ich mache so etwas, lasse die environDatei aber den aktuellen Hostnamen enthalten, da sich mein Home-Verzeichnis auf einer Netzwerkfreigabe befindet und ich den Agenten gleichzeitig auf verschiedenen Hosts ausführen möchte.

Und um explizit darauf hinzuweisen, wie dies Ihre Frage beantwortet, wie die SSH_AUTH_SOCKVariable zwischen Prozessen übergeben wird: Sie speichern die Ausgabe ssh-agentin einer Datei und geben sie in jeder Shell erneut als Quelle ein.

verwandte Informationen