Agent SSH traci tożsamość podczas ponownego uruchamiania komputera

12

Po utworzeniu kluczy z nazwą id_rsaw domyślnej lokalizacji. Dodaję tożsamość do agenta SSH za pomocą polecenia ssh-add ~/.ssh/id_rsa, dodaje się pomyślnie.

Mogę SSH bez wprowadzania hasła kluczowego, ponieważ jest już w SSH Agent.

Ale kiedy ponownie uruchamiam komputer lub serwer, a następnie sprawdzam tożsamość za pomocą polecenia ssh-add -L, otrzymuję komunikat podobny do tego The agent has no identities.

Czy to oznacza, że ​​po ponownym uruchomieniu komputera Agent utracił tożsamość? Czy to normalne zachowanie, czy coś, za czym tęsknię?

Proszę, poprowadź mnie, nie znam się na SSH.

Niks
źródło
Zobacz ten wątek na stronach Unix i Linux.
janosdivenyi

Odpowiedzi:

12

To normalne. Celem agenta kluczy jest po prostu przechowywanie odszyfrowanych kluczy w pamięci , ale nigdy nie zapisuje ich na dysku. (To by zniweczyło cel - dlaczego zamiast tego po prostu nie chronić głównego klucza?)

Dlatego klucze muszą być odblokowane przy każdym logowaniu i musisz to zautomatyzować - w systemie Linux używanie pam_sshjest jedną z opcji; automatycznie używa hasła do systemu operacyjnego, aby odblokować agenta. Kolejny podobny moduł to pam_envoy, który jest nieco bardziej niezawodny afaik (ale wymaga systemd).

Oba moduły same uruchomią agenta i automatycznie załadują klucze.

użytkownik1686
źródło
jakiś pomysł, jak zautomatyzować na terminalu Mac OSX?
Niks
Kiedy uruchomiłem polecenie $SSH_AUTH_SOCK , otrzymuję wynik:: -bash: /tmp/ssh-gT43vE99vk/agent.511Odmowa zezwolenia Jestem tutaj zdezorientowany .. czy mój agent przekierowuje, czy działa .. czy możesz prosić o wskazówki?
Niks
Nie należy go używać jako polecenia - jest to zmienna , której używasz jako części innego polecenia. Na przykład, echo $SSH_AUTH_SOCKaby wydrukować jego wartość.
user1686,
hej kolego ... jakiś pomysł? stackoverflow.com/questions/31916395/...
Niks,
2

Spróbuj tego do ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Powinno to monitować o podanie hasła dopiero po zalogowaniu.

Shiro
źródło
Dziękujemy za odpowiedź, co oznacza, że ​​agent SSH działa poprawnie. A po dodaniu tego nie trzeba dodawać tożsamości przy każdym uruchomieniu komputera? Przepraszam, jeśli to głupie pytanie, ale jestem nowy w ssh.
Niks
Jeśli posiadasz hasło ssh, będzie ono wyświetlane przy każdym logowaniu.
Shiro,
Ta odpowiedź jest szkodliwa . Jeśli zrobisz to, co mówi, usunie twój klucz prywatny. Jeśli nie masz innego sposobu uwierzytelnienia, utracisz dostęp do systemów, w których korzystałeś z uwierzytelniania za pomocą klucza publicznego.
kasperd
2

W OS X ssh-add ma specjalną flagę do połączenia z pękiem kluczy, jeśli zdecydujesz się tam przechowywać swój klucz prywatny.

Po prostu biegnij ssh-add -K ~/.ssh/id_rsa.

Wierzę, że to bardziej odpowiada na twoje pytanie. Ta flaga specyficzna dla OS X jest trudna do znalezienia dla dokumentacji, ale działa od co najmniej OS X Leopard.

Olivier Lacan
źródło
2
To jest poprawna odpowiedź, po ssh-add -Aktórej następuje dodanie wszystkich kluczy w pęku kluczy. Ponadto utwórz ~/.ssh/configi dodaj, UseKeychain yesaby system macOS zawsze zachowywał Twój klucz, jak opisano tutaj: unix.stackexchange.com/questions/140075/…
lucasarruda
Mój MacBook nadal zapomina mojej tożsamości, nawet po ponownym uruchomieniu komputera.
Dominic Sayers,
0

To rozwiązanie jest przydatne, jeśli klucze SSH są chronione hasłem.

Problem z wszystkich powyższych odpowiedzi jest, że jeśli klucz prywatny jest zabezpieczony hasłami, za każdym razem uruchomić nowy terminal i spróbować użyć klucza prywatnego, należy wpisać w haśle i skończy się uruchamianie wielu kopii ssh-agentIN pamięć. Rozwiązaniem jest dodanie następujących w twojej ~/.bashrclub ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Spowoduje to prośbę o podanie hasła prywatnego klucza (kluczy) ssh tylko raz po uruchomieniu terminalu. Późniejsze otwarcie nowych sesji terminali (lub seansów tmux) spowoduje ponowne użycie agenta ssh utworzonego przez powyższy fragment kodu.

Odniesienie

GMaster
źródło