Zapisz tożsamości dodane przez ssh-add, aby były trwałe

19

Niedawno skonfigurowałem, opensshaby móc go używać git.

Podczas konfigurowania (zgodnie z tym artykułem ) uruchomiłem polecenia:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>

Jakiś czas później, po wylogowaniu i ponownym zalogowaniu, próbowałem użyć git push, dostałem błąd. Rozwiązaniem tego błędu było ponowne uruchomienie tych samych poleceń.

Powiedz mi, jak mogę

  • Nie przestawaj ssh-agentdziałać, więc nie muszę zaczynać nowego
  • Zapamiętaj klucze, które dodałem, więc nie muszę ich dodawać za każdym razem

Aby to wyjaśnić, używam zsh, więc niektóre funkcje bash nie będą działać w moim .zshrc.

timotree
źródło
Powinieneś zacząć od zrozumienia, do czego służy ssh-agenti jak to działa, zanim spróbujesz dopasować to do twisted przypadku użycia.
Jakuje,
Jaki masz błąd?
Jakuje,
@Jakuje Błąd dotyczył brakującego klucza publicznego i zapytał: „Czy zacząłeś ssh-agent?”.
timotree

Odpowiedzi:

22

Do czego służy ssh-agenti jak działa?

ssh-agentPrzechowuje odszyfrowane klucze bezpiecznie w pamięci i na sesji. Nie ma rozsądnego i bezpiecznego sposobu na zachowanie odszyfrowanych kluczy podczas ponownego uruchamiania / ponownego logowania.

OK, jak mogę to zautomatyzować?

Zautomatyzuj ssh-agenturuchamianie

Dodaj

[ -z "$SSH_AUTH_SOCK" ] && eval "$(ssh-agent -s)"

do twojego ~/.bashrclub innego skryptu uruchamiania ( ~/.zshrc).

Zautomatyzuj dodawanie kluczy

Klucze można dodawać automatycznie przy pierwszym użyciu, gdy dodajesz

AddKeysToAgent yes

do twojego ~/.ssh/config.

Więcej informacji na temat ~/.ssh/configpatrz man ssh_config.

Jakuje
źródło
Więc mówisz, że jeśli włączę AddKeysToAgent, to po każdym wpisaniu eval "$(ssh-agent -s)"doda mój klucz?
timotree
Jeśli agent jest uruchomiony, a Twoja sshobsługuje tę opcję, to tak.
Jakuje,
Czy możesz wyjaśnić, w jaki sposób zautomatyzowałbym rozpoczęcie ssh-agentwtedy?
timotree
Zasadniczo, jak wyjaśniono w drugiej odpowiedzi. [ -z "$SSH_AUTH_SOCK" ] && eval $(ssh-agent)
Jakuje,
Czy to działa z Zsh?
timotree
5

Dodaj to do ~/.bashrc

Oznacza to, że ssh-agent zostanie uruchomiony automatycznie po otwarciu kolejnej sesji bez terminala

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
fi

jeśli potrzebujesz klucza do dodania do agenta, dodaj go

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
 ssh-add ~/.ssh/<your private ssh key>
fi
Savitoj Singh
źródło
1
To była dobra odpowiedź, ale nie wyjaśnia, co robi polecenie.
timotree