Wie kann ich dieses Problem mit ssh-agent lösen?

17

Ich verwende Linux Mint und habe es nicht geschafft, den Gnome-Schlüsselbund bei der Anmeldung automatisch freizuschalten.

Ein Symptom meines Problems ist wie folgt:

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

Wie kann ich es schaffen, dass Git ohne Passworteingabe von mir pushen / ziehen kann?

Mir ist klar, dass es hier verschiedene Dinge mit Gnom-Schlüsselbund und SSH-Agent gibt, aber ich habe es nicht geschafft, es festzunageln.

Das Ausführen ssh-addwährend einer Sitzung bedeutet, dass ich nicht mehr nach meiner Passphrase für SSH / git gefragt werde.

Das Problem ist, dass ich ssh-addwährend jeder Sitzung ausführen muss - mir muss fehlen, wie der Gnome-Schlüsselring beim Anmelden entsperrt wird.

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

Dies geschah erneut in derselben Sitzung wie bei der ersten Bearbeitung. Ich habe git pullund bekam WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory.

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager
eoinoc
quelle
1
Können Sie export | grep GNOMEdie Ergebnisse ausführen und veröffentlichen? Hast du diesen Bug gesehen?
Didster
Sieht aus wie ein relevanter Fehler. Da die Warnung nicht immer angezeigt wird, bin ich mir nicht sicher, ob ich ein einfacheres Problem habe, wenn ich mich gnome-keyringbeim Anmelden automatisch entsperre.
Eoinoc
Möglicherweise läuft auf Ihrem Computer ein anderer Agent als der Gnomschlüsselbund. Was ist mit env | grep SSHundps -fp $SSH_AGENT_PID
Stéphane Chazelas
@StephaneChazelas Ich habe hinzugefügt, was Sie vorgeschlagen haben, danke. Ja, ich habe das Leben mit zshund mit tmuxLaufen komplex gemacht (um das nur zu erwähnen).
Eoinoc

Antworten:

2

Was passieren soll ist:

Sie starten eine Gnome-Sitzung, die Teil des Starts eines Gnome-Schlüsselbund-Daemons ist (der auch als SSH-Agent fungiert), und die Umgebung aller während dieser Gnome-Sitzung gestarteten Elemente wird mit Informationen zur Kontaktaufnahme mit diesem SSH-Agenten aktualisiert. Das Kennwort, das Sie beim grafischen Anmelden eingeben, wird zum Entsperren des Standardschlüsselbunds verwendet.

Wenn Sie den gnome-keyring als ssh-Agent verwenden, möchten Sie keinen anderen Agenten wie diesen verwenden ssh-agent.

Wenn Ihre X-Sitzung beendet ist, ist auch der Gnome-Schlüsselbund beendet. Ihre tmux-Sitzung bleibt jedoch bestehen. Selbst wenn Sie einen anderen gnome-keyring oder ssh-agent starten, kann die Umgebung der Prozesse, die bereits gestartet wurden tmux, nicht mit ihm kommunizieren, es sei denn, Sie aktualisieren ihre Umgebung mit dem Pfad des neuen Sockets.

Was Sie tun könnten, ist:

gnome-keyring-daemon -r > ~/.gkr

Und machen Sie . ~/.gkrin allen Muscheln, die Sie wollen, den neuen Gnom-Schlüsselring

Überwachen Sie jedoch, mit welchem ​​DISPLAY sich der Gnome-Keyring-Daemon verbinden wird.

Stéphane Chazelas
quelle
Meinen Sie, dies gilt nur für den Fall, dass meine X-Sitzung beendet wird, dh wenn ich mich abmelde und wieder anmelde? Ich habe nicht .gkr, sollte ich? Wie kann ich aufpassen, mit welchem ​​Display gnome-keyring-daemoneine Verbindung hergestellt werden soll?
Eoinoc
2

Das erste, was ich versuchen würde, ist, dass apt-get install ssh-askpass-gnomewenn Sie dieses Paket (oder ein alternatives Askpass-Programm) nicht installiert haben, Gnome Sie nicht zur Eingabe Ihres Passworts auffordern kann, wenn Sie Ihren Schlüssel entsperren müssen.

Sie müssen auch Ihre DISPLAYVariable richtig eingestellt haben:

$ echo $DISPLAY
:0.0

Wie starten Sie Ihr Terminal? Möglicherweise liegt ein Problem damit vor, wie Sie die Terminalsitzung starten und ob sie von der Terminalsitzung erbt oder nicht gnome-session. Dies kann passieren, wenn Sie ein Gnon-Gnome-Programm verwenden, um Ihre Tastenzuordnungen festzulegen.

Vorausgesetzt, Sie verwenden gnome-terminal, können Sie mit überprüfen pstree. Hier sehen Sie die korrekte Vererbung:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

Während in dieser Sitzung erbt es NICHT von gnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

Überprüfen Sie auch, ssh-agentdass gestartet wird von gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
aculich
quelle
Es ist ein bisschen kompliziert, welches Terminal ich benutze (meine Schuld!). Mein Terminal-Startbefehl lautet mate-terminal --maximize -e tmux(was ich für gnome-terminal halte). Weiterhin zshwird dann innerhalb geladen tmux. ssh-askpass-gnomewurde installiert. $DISPLAYhat erwartetes Ergebnis. Für das Erbe tmuxsitzt unter mate-terminalohne Spannung von gnome-session. Auf einem separaten Zweig ist es tmux───zsh───xargs───pstree. Um Ihre letzte Frage zu beantworten, ist der Ausgang: init───mdm───mdm───x-session-manag───ssh-agent. Was denkst du? Vielen Dank.
Eoinoc
Angenommen, Sie verwenden Gnome (und ich denke, dass Mint dies standardmäßig tut, sofern Sie es nicht von der Standardeinstellung geändert haben?), dann liegt das Problem darin , dass Sie nicht von Gnome mate-terminalerben gnome-session. zwei Fragen: 1) Was ist die Ausgabe von pgrep -fl gnome-sessionund; 2) Was unternehmen Sie, um Ihr Terminal aufzurufen? von einer Speisekarte? von einer Tastenkombination? oder ????
ACULICH
Ja, ich bin auf Gnome. 1) Die Ausgabe ist leer. 2) Sehr interessant. Das mache ich normalerweise Ctrl+Alt+t. Es ist eine Verknüpfung, die ich mithilfe der Linux Mint-Anwendung Keyboard Shortcutsmit dem zuvor erwähnten Befehl festgelegt habe. Jedoch , beim Start Terminaldurch den Haupt Menü „Start“, SSH anders gehandelt . Die Gnome-Benutzeroberfläche forderte mich auf, mein Kennwort für meinen Schlüsselbund einzugeben. Die Option, diese Passphrase für spätere Sitzungen zu speichern, wurde abgeblendet. Ich konnte sie nicht auswählen. (Der Menübefehl ist auch mate-terminal --maximize -e tmux.) Kommt uns das näher? Danke, aculich.
Eoinoc
Wenn Sie das seltsame Verhalten mit dem sehen Ctrl+Alt+t, das Sie in den Tastaturkürzeln eingestellt haben, dann denke ich, dass Sie wahrscheinlich einen Fehler in mdm / MATE haben. Welche Version von Mint verwenden Sie?
ACULICH
Ich bin eine Version hinter Linux Mint 13. Warum sollte ich beim Terminal mit Menüzugriff immer noch nicht die Option "Diese Passphrase für jedes Mal speichern, wenn ich mich anmelde" auswählen?
Eoinoc
1

Ich glaube Problem beim dauerhaften Speichern des passwortgeschützten SSH-Schlüssels.

Bitte schauen Sie sich die folgenden Ressourcen an:

Md Mahbubur Rahman
quelle
Ich werde kommentieren, wie ich gehe. Mit dem ersten Link habe ich `IdentityFile ~ / .ssh / id_rsa` hinzugefügt, ~/.ssh/configaber das hat es nicht behoben .
Eoinoc
Der dritte Link zeigt das grundlegende Setup, das nicht weiter zu gehen scheint als das, was ich bereits getan habe. Trotzdem danke.
Eoinoc
-1

Fügen Sie dies Ihrem .bash_profile hinzu

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi
Mark Cohen
quelle
Danke Markus. Damit $SSH_AUTH_SOCKhat ein Wert von /tmp/ssh-QCndYkdq2025/agent.2025. Vermisse ich etwas? $git pullRuft immer noch die SSH-Passphrasen-Eingabeaufforderung auf.
Eoinoc
Überprüfen Sie Ihre Berechtigungen für die Datei .ssh / authorized_keys auf dem Server. Es sollte 0600 sein.
Mark Cohen
Auf dem Server? GitHub ist der externe Server und mein SSH-Schlüssel wird dort aufgezeichnet. Ist das nicht eher ein lokales Problem, nein?
Eoinoc
Tut mir leid, ich wusste nicht, dass du Github benutzt. Ja, Sie haben keine Kontrolle über diesen Host. Sie können Ihrem ssh-agent mehrere Schlüssel hinzufügen und sshing mit localhost testen, um sicherzustellen, dass Sie ordnungsgemäß authentifizieren können. Sie können auch ssh -vvv user @ host ausprobieren und sehen, was kaputt geht.
Mark Cohen
Die meisten Desktop-Linux-Systeme (einschließlich Mint) ssh-agentwerden bei der Anmeldung direkt nach dem Auspacken ordnungsgemäß gehandhabt, und es sind in der Regel solche Roll-Your-Own-Dinge, die das Problem lösen. Wenn Ihr System aus irgendeinem Grund nicht funktioniert ssh-agent, tun Sie dies nicht von Hand. Verwenden Sie stattdessen einen Schlüsselbund, der für diese und verwandte Probleme gut geeignet ist. Es funktioniert auch für BSD (Mac) und andere Nicht-Linux-Systeme.
ACULICH