Jak na stałe dodać tożsamość dla SSH?

37

Muszę uruchamiać ssh-add <key>za każdym razem, gdy potrzebuję ssh do serwera WWW. Czy istnieje sposób, aby dodać identyfikator na stałe, więc nie muszę dodawać tożsamości przy każdym logowaniu?

EDYCJA: Klucz to plik pem, który pobrałem z usługi w chmurze.

theTuxRacer
źródło

Odpowiedzi:

40

Wygeneruj swój klucz jak zwykle:, ssh-keygena następnie umieść ten klucz na zdalnym serwerze ssh-copy-id, który zsynchronizuje go z zaakceptowanymi kluczami zdalnego serwera.

ssh-keygen
ssh-copy-id user@host

Zostanie wyświetlony monit o podanie hasła, a następnie wykonaj wszystkie czynności niezbędne do połączenia .pubklucza ze zdalnym serwerem SSH.

Domyślnie skopiuje wszystkie klucze .pub na zdalny serwer. Jeśli właśnie utworzyłeś swój klucz, ssh-keygennie stanowi to problemu (ponieważ masz tylko jeden!). Jeśli jednak masz wiele kluczy, możesz skopiować tylko określony klucz z -iflagą.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Zastąpienie key_name.pubnazwą klucza.

Marco Ceppi
źródło
4
Dla kogoś takiego jak ja (lub pytającego), którego jedyną ekspozycją na ssh jest użycie go do uzyskania dostępu do serwerów hostowanych w chmurze, gdzie usługa sieciowa tworzy klucz i przekazuje go (w moim przypadku, serwery AWS), odpowiedź ta jest trudna do uzyskania zrozumieć bez przeprowadzania istotnych badań w tle. Nigdy nie korzystałem ssh-keygenlub ssh-copy-id, na przykład. Z drugiej strony odpowiedzi takie jak ta są dla mnie całkowicie jasne i przydatne, biorąc pod uwagę mój poziom wiedzy. Od Ciebie zależy, czy chcesz w jakikolwiek sposób poprawić swoją odpowiedź, aby pomóc ignorantom takim jak ja. :)
Mark Amery
Odpowiedź zakłada, że ​​chcę wygenerować nowy klucz. Co jeśli chcę po prostu zarejestrować istniejący klucz w breloku?
donquixote
@donquixote: patrz odpowiedź poniżej autor626052.
naught101
7

Możesz wygenerować klucz ssh za pomocą polecenia:

ssh-keygen

Następnie możesz skopiować swój klucz na serwer za pomocą:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Teraz możesz automatycznie zalogować się do swojego serwera

Arthur Knopper
źródło
1
Aby skopiować klucz na serwer, wystarczy użyć ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernamelub ~/.ssh/id_rsa.pubodpowiednio. W rzeczywistości, jeśli użyjesz domyślnej nazwy pliku klucza, nawet nie musisz go określać.
Carsten Thiel,
5

włóż to do swojego ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 
użytkownik626052
źródło
3
To jedyna odpowiedź, która faktycznie odpowiada na pytanie. Inni tylko dodają domyślny klucz publiczny do pojedynczego serwera docelowego, co jest denerwujące, jeśli masz dwa + oddzielne dla różnych zestawów serwerów.
naught101
3

Jeśli twój klucz nie zawiera hasła i jest nazwany jednym z plików, które ssh spróbuje wyszukać podczas identyfikacji ( ~/.ssh/id_dsalub ~/.ssh/id_rsa), nie powinieneś dodawać go do swojego agenta.

ALE. Jeśli istnieje jakakolwiek możliwość kradzieży tych plików, pozwoliłbyś każdemu na dostęp do serwerów, na których używasz tej tożsamości. W skrócie, pwned.

IMHO, klucze prywatne bez hasła są złą praktyką i powinny być używane tylko w środowiskach, w których ~/.ssh/authorized_keysjest bardzo restrykcyjny.

zuzur
źródło
1
ssh-agent może przechowywać odszyfrowany klucz prywatny, gdy jesteś zalogowany. Jeśli jest włączony, gnome-keyring może nawet użyć Twojego hasła logowania. Aha, i ssh-copy-id może również skopiować twój klucz publiczny na serwery.
Frank
2

Napisz krótki skrypt powłoki, który uruchomi ssh-add, a następnie połączy się, na przykład:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Następnie możesz ssh do swojego hosta za pomocą jednego polecenia.

hgolov
źródło
1

W przypadku AWS pobierz klucz pem i uruchom:

ssh-add /path/to/pemfile.pem

To działało dla mnie, Ubuntu 18.04. Źródło , nic więcej nie było potrzebne.

Uwaga : Przed wykonaniem tej czynności należy jednak ustawić uprawnienia na 400.

chmod 400 /path/to/pemfile.pem

Jeśli nie, pojawi się błąd:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
OSTRZEŻENIE: NIEBEZPIECZNY PRYWATNY KLUCZOWY PLIK! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Uprawnienia 0664 dla „/home/toing_toing/blablabla.pem” są zbyt otwarte. Wymagane jest, aby pliki kluczy prywatnych NIE były dostępne dla innych. Ten klucz prywatny zostanie zignorowany.

toing_toing
źródło
0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 
wangjianli
źródło
-2

Czy mówisz o usłudze Amazon Cloud? W ~ / .bashrc utwórz zmienne środowiskowe:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

źródło
tak, mówię o chmurze, ale jest to para kluczy do ssh w instancji, a powyższe zmienne środowiskowe są niezbędne do korzystania z narzędzi API :)
theTuxRacer
Dobrze. Tak więc wygeneruj klucz RSA bez hasła: 'ssh-keygen -t rsa', a następnie połącz wygenerowany klucz publiczny (~ / .ssh / id_dsa.pub) z plikiem ~ / .ssh / Author_keys na serwerze zdalnym. Wiele osób podało jedną linijkę, aby to osiągnąć.