Wie kann man dafür sorgen, dass Git nicht nach einer Passphrase für den SSH-Schlüssel fragt?

Wie kann man dafür sorgen, dass Git nicht nach einer Passphrase für den SSH-Schlüssel fragt?

Ich verwende Git Bash und richte den SSH-Schlüssel mit ssh-keygen ein. Jedes Mal, wenn ich etwas mit einem Repo mache, fragt mich Git nach der Passphrase dafür /c/Users/jankiewj/.ssh/id_rsa. Gibt es eine Möglichkeit, diese Passphrase zu deaktivieren?

BEARBEITEN: Ich habe den Originaltitel bearbeitet (Windows entfernt), da ich gerade eine Neuinstallation von Ubuntu auf meinem Arbeitslaptop durchgeführt habe und wenn der SSH-Schlüssel eine Passphrase hat, wird immer danach gefragt und die Lösung zur Behebung ist dieselbe. Dies funktioniert wahrscheinlich auf MacOSX, das ebenfalls Unix ist, genauso und verwendet dieselben grundlegenden Tools.

Antwort1

Sie können dies in Git Bash, Windows WLS oder Bash auf echtem GNU/Linux ausführen.

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

Im zweiten Befehl werden Sie nach der Passphrase gefragt, und das war’s. Bei jeder weiteren Aktion, die Sie ausführen müssen (für die früher die Passphrase erforderlich war), werden Sie nicht nach der Passphrase gefragt (siehe Beispiel im folgenden Screenshot):

Hinzufügen einer Passphrase in Git Bash unter Windows

Antwort2

Eine etwas bessere undpermanente Lösungist, den SSH-Agenten automatisch zu starten, wenn die Git-Bash unter Windows geöffnet wird. Sie können das Folgende in Ihre .profile- oder .bashrc-Datei kopieren/einfügen. Ich ziehe es vor, es auf der.Profil

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

Diese Lösung wurdeaus diesem GitHub-Hilfeartikel

Antwort3

TDLR: Für Windows-Benutzer,

  • laufenssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • nichtssh-add ~/.ssh/id_rsa

Das hier sehe ich zum Beispiel ständig:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

Beachten Sie die inkonsistenten Pfadtrennzeichen: Der SSH-Agent konvertiert ~ mit Unix-Pfadtrennzeichen, Git verwendet jedoch stattdessen Windows-Pfadtrennzeichen. Da der Pfad der id_rsaDatei als Schlüssel verwendet wird, erklärt dies, warum der Cache fehlt.

  • Ein weiterer Unterschied ist, dass C:/statt/c/
  • Verwandter Hinweis: Wenn Git Sie nach der Passphrase fragt, wird diese nicht zwischengespeichert, Sie können sie also unbegrenzt oft eingeben. Versuchen Sie, die Phrase ssh-addnur an weiterzugeben.
  • Unter Windows gehen Sie davon aus, dass es ~sich um „mehrwertig“ handelt. Daher ist es am besten, explizit anzugeben.
  • ssh-addbetrachtet Standardspeicherorte wie ~/.ssh/id_rsa. Unter Windows gehen Sie davon aus, dass dies nicht eindeutig ist. Geben Sie den explizit formatierten Pfad explizit ein, anstatt sich auf Standardpfade zu verlassen:
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa", also auch in der Antwort von @velval.

Antwort4

Schlüsselanhängerist ein Programm, um diese Arbeit intelligent zu erledigen.

Es sollte von .bashrc (oder einer gleichwertigen Datei) ausgeführt werden und richtet die Umgebung korrekt ein, keine andere Konfiguration als die zu ladenden Schlüssel.

Das hier verwende ich:keychain --quiet key1.pem key2.pem

Es erkennt, dass die Shell Zsh ist, und es funktionierte genauso, als ich Bash verwendete.

verwandte Informationen