Jak mogę rozwiązać ten problem z agentem ssh?


17

Używam Linux Mint i wydaje mi się, że nie udało mi się uzyskać kluczy gnome do automatycznego odblokowania przy logowaniu.

Objaw mojego problemu jest następujący:

$ 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

Jak mogę sprawić, że git może pchać / ciągnąć bez żadnego hasła ode mnie?

Zdaję sobie sprawę, że jest tu kilka rzeczy z breloczkiem do gnome i agentem ssh, ale nie udało mi się tego naprawić.

Uruchamianie ssh-addpodczas sesji oznacza, że ​​nie jestem już proszony o podanie hasła do SSH / git.

Problem polega na tym, że musiałbym biegać ssh-addpodczas każdej sesji - brakuje mi sposobu odblokowania kluczy Gnome przy logowaniu.

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

Zdarzyło się to ponownie podczas tej samej sesji, co pierwsza edycja. Zrobiłem git pulli dostałem 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

1
Czy możesz uruchomić export | grep GNOMEi opublikować wyniki. Widziałeś ten błąd?
didster

Wygląda jak odpowiedni błąd. Ponieważ nie zawsze widzę to ostrzeżenie, nie jestem pewien, czy mam prostszy problem, polegający gnome-keyringna automatycznym odblokowaniu podczas logowania.
eoinoc,

prawdopodobnie masz innego agenta niż gnome-keyring. Co env | grep SSHips -fp $SSH_AGENT_PID
Stéphane Chazelas

@StephaneChazelas Dodałem to, co zasugerowałeś, dzięki. Tak, sprawiłem, że życie jest skomplikowane zshi tmuxbiegam (żeby tylko wspomnieć o tym).
eoinoc,

Odpowiedzi:


2

Co ma się wydarzyć to:

Zaczynasz sesję gnome, po części uruchamia się demon kluczy gnome (który działa również jako agent ssh), a środowisko wszystkiego, co uruchomiono podczas tej sesji gnome, jest aktualizowane o informacje o tym, jak skontaktować się z tym agentem ssh. Hasło, które wydajesz podczas graficznego logowania, służy do odblokowania domyślnego breloka.

Kiedy używasz gnome-keyring jako agenta ssh, nie chcesz używać innego agenta, takiego jak ssh-agent.

Kiedy twoja sesja X zakończy się, tak samo robi gnome-keyring. Ale twoja sesja tmux pozostaje. Wtedy, nawet jeśli uruchomisz inny gnome-keyring lub ssh-agent, środowisko już uruchomionych procesów tmuxnie będzie w stanie z nim rozmawiać, chyba że zaktualizujesz ich środowisko ścieżką nowego gniazda.

Co możesz zrobić to:

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

I . ~/.gkrwe wszystkich powłokach, które chcesz użyć nowego klucza do gnome

Uważaj jednak na WYŚWIETLANIE, z którym demon gnome-keyring-ma się połączyć.


Czy masz na myśli to tylko, gdy moja sesja X zakończy się, innymi słowy za każdym razem, gdy wylogowuję się i loguję ponownie? Nie mam, prawda .gkr? Jak mogę się wystrzegać, z którym wyświetlacz gnome-keyring-daemonbędzie się łączyć?
eoinoc,

2

Pierwszą rzeczą, którą spróbuję, jest apt-get install ssh-askpass-gnomeinaczej, jeśli nie masz zainstalowanego tego pakietu (lub innego alternatywnego programu askpass), a następnie gnome nie może poprosić o hasło, gdy musisz odblokować klucz.

Musisz także DISPLAYodpowiednio ustawić zmienną:

$ echo $DISPLAY
:0.0

Ponadto, jak zaczynasz swój terminal? Może występować problem ze sposobem rozpoczęcia sesji terminalowej i tego, czy ona dziedziczy gnome-session. Może się to zdarzyć, gdy użyjesz jakiegoś programu gnon-gnome do ustawienia przypisania klawiszy.

Zakładając, że używasz gnome-terminal, możesz sprawdzić za pomocą pstree. Tutaj możesz zobaczyć, jak dzieje się prawidłowe dziedziczenie:

$ 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}+

Podczas gdy w tej sesji NIE dziedziczy po 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)

Sprawdź także, czy ssh-agentjest uruchamiany przez gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)

Trochę skomplikowane jest to, z którego terminala korzystam (moja wina!). Moje polecenie uruchomienia terminala to mate-terminal --maximize -e tmux(które, jak zakładam, to gnome-terminal). Ponadto zshjest następnie ładowany tmux. ssh-askpass-gnomezostał zainstalowany. $DISPLAYoczekiwał wyniku. Dla dziedziczenia tmuxsiedzi pod mate-terminalspodem bez rozgłosu gnome-session. Na osobnej gałęzi tmux───zsh───xargs───pstree. Aby odpowiedzieć na to ostatnie pytanie, wyjście jest: init───mdm───mdm───x-session-manag───ssh-agent. Co myślisz? Dzięki.
eoinoc,

no cóż, zakładając, że używasz gnoma (i myślę, że Mint domyślnie, więc chyba że zmieniłeś go z domyślnego?), to myślę, że problem nie polega na tym, że nie mate-terminaldziedziczysz gnome-session. dwa pytania: 1) jaki jest wynik pgrep -fl gnome-sessioni; 2) Jakie działania podejmujesz, aby faktycznie wywołać terminal? z menu? z powiązania skrótu? lub ????
aculich

Tak, jestem na Gnome. 1) Wyjście jest puste. 2) Bardzo interesujące. Zwykle tak robię Ctrl+Alt+t. Jest to skrót, który ustawiłem za pomocą aplikacji Linux Mint Keyboard Shortcutsza pomocą wcześniej wspomnianego polecenia. Jednak podczas uruchamiania Terminalza pośrednictwem głównego menu „Start” SSH działał inaczej . GUI Gnome poprosiło mnie o podanie hasła do mojego breloka. Opcja zapisania tego hasła dla późniejszych sesji była wyszarzona, nie mogłem go wybrać. (Również polecenie uruchamiania menu mate-terminal --maximize -e tmux.) Czy to nas zbliża? Dzięki, Aculich.
eoinoc,

Jeśli widzisz dziwne zachowanie z Ctrl+Alt+tustawionymi w Skrótach klawiszowych, to myślę, że prawdopodobnie masz błąd w mdm / MATE. Z jakiej wersji Mint korzystasz?
aculich

Jestem o jedną wersję w tyle za Linux Mint 13. Ale jeśli chodzi o terminal z dostępem do menu, dlaczego nadal nie pozwoliłbym wybrać „zapisz to hasło za każdym razem, gdy się loguję”?
eoinoc,

1

Będę komentować jak idę. Z pierwszym linkiem dodałem `IdentityFile ~ / .ssh / id_rsa`, ~/.ssh/configale to nie naprawiło tego.
eoinoc,

Trzeci link pokazuje podstawową konfigurację, która wydaje się nie wykraczać poza to, co już zrobiłem. W każdym razie dzięki.
eoinoc

-1

Dodaj to do swojego .bash_profile

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

Dzięki Mark. Dzięki temu $SSH_AUTH_SOCKma wartość /tmp/ssh-QCndYkdq2025/agent.2025. Czy coś brakuje? $git pullnadal wyświetla monit o hasło SSH.
eoinoc,

Sprawdź swoje uprawnienia do pliku .ssh / Author_keys na serwerze. Powinno być 0600.
Mark Cohen

Na serwerze? GitHub to serwer zewnętrzny, na którym zapisany jest mój klucz SSH. Czy to nie jest problem lokalny, nie?
eoinoc,

Przepraszamy, nie zdawałem sobie sprawy, że używasz github. Tak, nie masz kontroli nad tym hostem. Możesz dodać wiele kluczy do swojego agenta ssh i eksperymentować sshing z localhost, aby upewnić się, że możesz poprawnie autoryzować. Możesz także spróbować ssh -vvv user @ host i zobaczyć, co się psuje.
Mark Cohen

Większość stacjonarnych systemów Linux (w tym Mint) ssh-agentpoprawnie obsługuje się po zalogowaniu od razu po wyjęciu z pudełka i zwykle są to takie rzeczy, które je psują. Jeśli z jakiegoś powodu twój system nie obsługuje ssh-agent, nie rób tego ręcznie. Zamiast tego użyj pęku kluczy, który jest dobrze zaprojektowany do obsługi tego i powiązanych problemów. Działa również dla BSD (Mac) i innych systemów innych niż Linux.
aculich
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.