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.