Prosty sposób na uruchomienie ssh-agent i ssh-add przy logowaniu przez SSH?

38

Staram się, aby następujące polecenia były automatycznie wykonywane podczas logowania do mojego serwera za pośrednictwem ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Mój klucz ssh ma hasło i nie mam nic przeciwko wprowadzeniu go raz podczas logowania.

Próbowałem umieścić to w moim pliku .bashrc, jednak uważam, że ssh-agent rozpoczyna nową sesję bash. Kiedy próbuję się zalogować po tym, jak mam to w moim .bashrc, blokuje się i muszę wpisać „exit”, aby zobaczyć komunikat „enter passsphrace to unlock key”

Jakieś inne sugestie?

Serwer działa Ubuntu LTS

Kliknij opcję Upvote
źródło
Dlaczego kluczowy agent na serwerze? Powinien być na lokalnym kliencie , z którym się łączysz.
Zoredache
@Zoredache Chcę być w stanie to zrobić git pullna zdalnym serwerze
kliknij Upvote
Następnie uruchom agenta SSH na komputerze lokalnym i przekaż agenta.
Zoredache,
@Zoredache Dzięki, nie wiedziałem, że to możliwe. Jednak nadal chciałbym móc ssh-add / ssh-agent z poziomu skryptu bash, nawet z mojego komputera lokalnego. Trudno jest ręcznie uruchamiać te polecenia.
Kliknij Upvote

Odpowiedzi:

52

Możesz spróbować dodać to:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

W ten sposób ssh-agentnie uruchamia nowej powłoki, po prostu uruchamia się w tle i wyrzuca polecenia powłoki, aby ustawić odpowiednie zmienne środowiskowe.

Jak powiedziano w komentarzu, być może nie chcesz wcale uruchamiać agenta na zdalnym hoście, ale raczej na urządzeniu, z którego pracujesz, i używać

ssh -A remote-host

aby przekazać usługi lokalnego agenta ssh do zdalnego hosta.

Ze względów bezpieczeństwa powinieneś używać przekazywania agentów tylko na hostach prowadzonych przez osoby godne zaufania, ale jest to lepsze niż zdalne uruchamianie pełnego agenta w dowolnym momencie.

Tobi Oetiker
źródło
Kiedy wymienić ssh-agent /bin/bashz ssh-agent -s, a następnie staram się robić git pull, jestem ciągle prosił o hasłem klucza prywatnego, aby go odblokować. To nie jest tak naprawdę to, czego chcę, chcę tylko wprowadzić hasło podczas robienia ssh-add i nie muszę go powtarzać za każdym razem, gdy uruchamiam jakieś polecenia git. Jakieś pomysły?
Kliknij Upvote
a lokalne uruchamianie agenta i używanie ssh -A nie jest dla ciebie opcją? Problem polega na tym, że nie można „zrestartować” agenta ssh przy każdym połączeniu. Za każdym razem, gdy go uruchomisz, nie wie „nic”, a kiedy dodasz klucz, będziesz musiał go odszyfrować ...
Tobi Oetiker
dla pliku .ssh / config: Host zdalnego hosta ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker
1
oops właśnie zdałem sobie sprawę, że potrzebujesz bashu przed wezwaniem ssh-agent .. zaktualizowałem moją odpowiedź powyżej
Tobi Oetiker
1
możesz utworzyć alias
Tobi Oetiker
2

Jedną z możliwości jest użycie pęku kluczy Funtoo . Następnie możesz przykleić ten liner do skorupy bash:

eval $(keychain --eval id_rsa)

To samo robi (uruchamia agenta ssh itp.), Nie uruchamiając również procesu ssh-agent dla każdej podpowłoki. Zamiast tego szuka „już uruchomionych” instancji, które posiadasz i dołącza do nich.

Erik Aronesty
źródło