Jak skonfigurować SSH, aby nie musiałem wpisywać hasła podczas łączenia się z hostem?
~/.ssh/config
która jest teraz wymagana PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Jak skonfigurować SSH, aby nie musiałem wpisywać hasła podczas łączenia się z hostem?
~/.ssh/config
która jest teraz wymagana PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Odpowiedzi:
Jeśli zdarzy ci się używać GNOME, aplikacja konika morskiego („Hasła i klucze szyfrowania”) może to zrobić za Ciebie: Plik -> Nowy -> Bezpieczny klucz powłoki .
Jeśli wolisz terminal, uruchom, aby wygenerować parę kluczy. Prawidłowe typy kluczy to:ssh-keygen -t <type>
Program poprosi o podanie hasła i lokalizacji, w której chcesz zapisać nowy klucz. Zalecane jest użycie sugerowanej ścieżki domyślnej, ponieważ wszystkie inne narzędzia będą tam jej szukać.
Ponownie konik morski często może to zrobić za Ciebie - w Moich kluczach osobistych kliknij prawym przyciskiem myszy klucz SSH i wybierz Konfiguruj klucz dla bezpiecznej powłoki .
Lub ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
w terminalu.
Lub całkowicie ręcznie krok po kroku:
.ssh
w katalogu osobistym użytkownika zdalnego na hoście zdalnym.authorized_keys
(jeśli jeszcze nie istnieje).umask
jest bardziej liberalny niż zwykle sprawiają, że plik nie grupowego zapisu: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) do zdalnego ~/.ssh/authorized_keys
pliku.Jeśli załadujesz swój klucz prywatny do agenta ssh , będzie on przechowywać odszyfrowany klucz w pamięci. Chcemy, aby uniknęło to ponownego wprowadzania hasła za każdym razem, gdy korzystamy z powłoki na serwerze.
Najpierw należy uruchomić agenta lub ścieżkę uruchomionego gniazda komunikacyjnego załadować do zmiennej. Uruchomienie ssh-agent na terminalu wygeneruje polecenia do przypisywania i ustawiania zmiennych agenta. Te polecenia można zapisać w pliku do użycia w innym terminalu. Alternatywnie można uruchomić te polecenia i zapomnieć o ponownym użyciu tego samego agenta w innym terminalu. np eval $(ssh-agent)
. :
Załadowanie klucza to prosta kwestia wykonania ssh-add
i nadania mu hasła.
Jeśli korzystasz z GNOME, gnome-keyring-daemon zwykle zapewnia tę samą funkcjonalność agenta SSH, co ssh-agent, więc nie musisz nic uruchamiać. GNOME również automatycznie załaduje i odblokuje klucz podczas logowania.
Jeśli wszystko zostało wykonane poprawnie, użycie nie wyświetli monitu o podanie hasła. Jeśli coś jest nie tak z agentem, a nie z kluczem, zostaniesz poproszony o wpisanie hasła do klucza, a nie hasła do konta użytkownika.ssh user@server
Wszystko, co korzysta z ssh do komunikacji, będzie działało bez wprowadzania hasła do konta użytkownika, gdy odpowiedni agent zostanie załadowany do agenta. Wykorzystują to programy takie jak scp , sftp i rsync .
id_dsa
zamiast id_rsa
, a ECDSA będzie mieć id_ecdsa
.authorized_keys2
- ale jest naprawdę mało prawdopodobne, że znajdziesz coś starszego niż 5.0 w użyciu.lsh
, ssh.com
i inne (uniksowe i nie) serwery SSH nie są uwzględnione w tym samouczku.Kopiowanie klucza publicznego na zdalny host:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / Author_keys '# or this
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / cross-terminal-agent
ssh-copy-id
które kopiuje klucz publiczny do hosta docelowego i automatycznie ustawia uprawnienia.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(wystarczy wymienić username@server-ip-or-address
).
Nie określiłeś, na którym Uniksie używasz, z jakim Uniksem się łączysz, z jakiej powłoki korzystasz, z jakiego wariantu SSH korzystasz itp. Więc niektóre z nich mogą wymagać niewielkiej korekty; jest to oparte na stosunkowo niedawnych wersjach OpenSSH, które są używane w wielu wariantach unix.
To wszystko z lokalnego systemu komputerowego.
ssh-keygen
Pamiętaj, aby użyć domyślnej nazwy klucza. I sugerują, że zrobić ustawić hasło na tym kluczem, w przeciwnym razie jest to problem bezpieczeństwa. „-t rsa” nie byłoby złym pomysłem, ale prawdopodobnie nie jest potrzebne.
ssh-copy-id username@server
Zostaniesz zapytany o hasło, którego użyjesz do zalogowania się, i skonfiguruje dla ciebie elementy autoryzowane_kluczy. (nie trzeba tego robić ręcznie)
Wtedy to:
`ssh-agent`
a może to:
exec ssh-agent sh
lub:
exec ssh-agent bash
Spowoduje to uruchomienie agenta SSH, który może przechowywać Twój klucz. W wielu współczesnych wariantach Uniksa, jeśli jesteś zalogowany graficznie, to już miało miejsce. Pierwszy wariant (z backtickami) umieszcza agenta ssh w tle i konfiguruje zmienne środowiskowe, aby z nim rozmawiać. W dwóch drugich agent uruchomi dla ciebie powłokę, więc gdy wyjdziesz z powłoki, agent wyjdzie.
Wiele współczesnych wariantów Uniksa będzie już miało dla ciebie agenta, szczególnie jeśli zalogowałeś się graficznie. Możesz spróbować „ ps aux | grep ssh-agent
” lub „ ps -ef | grep ssh-agent
”; jeśli coś już działa, użyj tego.
Wreszcie:
ssh-add
Poprosi o hasło; daj mu ten, który dałeś ssh-keygen. Są też sposoby, aby poprosić graficznie. I możesz umieścić ssh-agent i ssh-add rzeczy w swoich skryptach logowania (konfiguracja różni się w zależności od używanej powłoki), aby zautomatyzować to, ale niektóre warianty Unix (na przykład obecny Ubuntu Linux) robią większość z nich automatycznie, więc wszystko, co naprawdę musisz zrobić, to utworzyć klucz i użyć ssh-copy-id, aby ustawić go na zdalnym hoście.
Teraz „ ssh username@server
” powinno działać bez pytania o uwierzytelnienie. Za kulisami używa klucza, który trzyma ssh-agent, i prosi agenta o wykonanie magicznych sztuczek podpisywania.
Można to zrobić również w PuTTY na Windowsie.
Po skonfigurowaniu pary kluczy publiczny / prywatny (jak pokazują inne odpowiedzi tutaj) uruchom PuttyGen. Tam załaduj istniejący klucz prywatny, który już skonfigurowałeś, a następnie zapisz go jako klucz prywatny PuTTY (ppk).
Następnie w PuTTY, po prostu kliknij zapisaną sesję, do której chcesz się automatycznie zalogować i kliknij Załaduj. Stąd przejdź do Połączenia -> Dane w lewym okienku i w polu „Automatycznie loguj nazwę użytkownika” wpisz nazwę użytkownika dla tego zdalnego serwera:
Następnie przejdź do Connection -> SSH -> Auth i wyszukaj ppk zrobione w PuttyGen:
Następnie wróć do strony sesji i zapisz wcześniej załadowaną sesję.
Z bardzo podobnego pytania dotyczącego ServerFault polecam użycie ssh-copy-id , który wykonuje wszystkie kroki związane z konfigurowaniem kluczy uwierzytelniających:
ssh-copy-id to skrypt, który używa ssh do logowania do zdalnego komputera (prawdopodobnie przy użyciu hasła logowania, więc uwierzytelnianie hasła powinno być włączone, chyba że sprytnie wykorzystałeś wiele tożsamości)
Zmienia również uprawnienia zdalnego domu, ~ / .ssh i ~ / .ssh / uprawnione_klucze do usuwania możliwości zapisu grupowego (co w innym przypadku uniemożliwiłoby zalogowanie się, jeśli zdalny sshd ma ustawione StrictModes w swojej konfiguracji).
Jeśli podano opcję -i, wówczas używany jest plik tożsamości (domyślnie ~ / .ssh / tożsamość.pub), niezależnie od tego, czy w ssh-agent są jakieś klucze.
Wszystko, co musisz zrobić, to po prostu:
ssh-copy-id user@host
Wpisz hasło raz i możesz zacząć!
Oprócz wszystkiego, co już powiedziano, jak ustawić klucze ssh, polecam Keychain jako frontend konsoli ssh-agent, który pozwala obsłużyć tylko jeden proces systemowy zamiast logowania.
Wiem, że istnieją już narzędzia GNOME i KDE, które robią to samo, ale jeśli jesteś ćpunem konsolowym, jest to świetne (i może być używane w większości systemów uniksowych).
Aby go użyć, po prostu dodaj do swojego ~/.bashrc
(podobnie jak w przypadku innych powłok):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http://linuxproblem.org/art_9.html
Twój cel
Chcesz używać Linuksa i OpenSSH do automatyzacji swoich zadań. Dlatego potrzebujesz automatycznego logowania z hosta A / użytkownika a do hosta B / użytkownika b. Nie chcesz wprowadzać żadnych haseł, ponieważ chcesz wywoływać ssh z poziomu skryptu powłoki.
Napisałem ten bardzo krótki samouczek po NAPRAWDĘ NAPRAWDĘ sfrustrowanym NAPRAWDĘ NAPRAWDĘ długimi samouczkami, bo to naprawdę takie proste :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
ssh-keygen
. (Jeśli powie Ci, że musisz określić typ, zrób to ssh-keygen -t rsa
). Gdy poprosi o lokalizację pliku, wybierz domyślną wartość. Gdy pojawi się prośba o hasło, naciśnij Enter, aby nie podać hasła.cat ~/.ssh/id_rsa.pub
(lub jakakolwiek była domyślna lokalizacja pliku ssh-keygen
, chociaż trzeba by mieć naprawdę starą ssh
instalację, aby była inna); skopiuj dane wyjściowe do schowka.~/.ssh/authorized_keys
(jeśli ~/.ssh
nie istnieje, slogin
gdzieś; jest to prosty i łatwy sposób na utworzenie go z odpowiednimi uprawnieniami). Wklej swój schowek (zawierający id_rsa.pub
inny host) do tego pliku.Jeśli chcesz to wszystko zrobić w terminalu w systemie Linux:
Na hoście
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "tekst komentarza, jeśli chcesz" -f id_ArbitraryName
Pozycje w {} to opcje, użyj rsa lub dsa i wybierz rozmiar bitu (większy jest bardziej bezpieczny)
Następnie musisz dodać uprawnienia do plików autoryzowanych_kluczy i autoryzowanych_kluczy2.
cat id_ArbitraryName.pub >> klucze_autoryzowane
cat id_AribtraryName.pub >> klucze_autoryzowane2
Następnie pobierz plik id_AribtraryName do pola, z którego chcesz ssh. Jeśli skrzynka połączeniowa jest oparta na systemie Unix, może być konieczny plik konfiguracyjny (w putty, ktoś powyżej to ukrył).
Na skrzynce połączeniowej
W twoim pliku konfiguracyjnym - vim ~ / .ssh / config
Host example.host.com # lub nazwa komputera
Nazwa użytkownika
IdentityFile ~ / .ssh / id_ArbitraryName
Plik konfiguracyjny wymaga uprawnień 600. Folder SSh wymaga 700.
Mam nadzieję, że to pomoże, jeśli napotkasz problem konfiguracji, który jest często pomijany.