2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

Jak skonfigurować SSH, aby nie trzeba było wpisywać hasła?

Jak skonfigurować SSH, aby nie trzeba było wpisywać hasła podczas łączenia się z hostem?

Odpowiedzi (10)

167
167
167
2009-07-18 17:36:45 +0000

Wygeneruj klucz SSH (jeśli go nie masz)

Jeśli używasz GNOME, aplikacja seahorse (“Hasła i klucze szyfrowania”) może to zrobić za Ciebie: File —–> New —–> Secure Shell Key.

Jeśli wolisz terminal, uruchom ssh-keygen -t <type> aby wygenerować parę kluczy. Poprawne typy pary kluczy to:

  • rsa: domyślny
  • dsa: mniej więcej równoważny, tyle że ograniczony do kluczy 1024-bitowych
  • ecdsa: to samo bezpieczeństwo przy mniejszych kluczach, ale stosunkowo nowy i nieco rzadko spotykany w oprogramowaniu SSH.
  • ed25519: Wysokie bezpieczeństwo (bardziej odporny na ataki kanałów bocznych i słabe generatory liczb losowych). Bardzo szybkie generowanie sygnatur. Bardzo nowy. Dostępny tylko w OpenSSH 6.5 .

Program poprosi Cię o podanie passphrase oraz miejsca, w którym ma być zapisany nowy klucz. Zalecane jest użycie sugerowanej ścieżki domyślnej, ponieważ wszystkie inne narzędzia będą go tam szukały.

Prześlij klucz publiczny do zdalnego serwera

Ponownie, seahorse często może to zrobić za ciebie - w My Personal Keys, kliknij prawym przyciskiem myszy na klucz SSH i wybierz Configure key for secure shell.

Lub, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host w terminalu.

Lub, całkowicie ręcznie krok po kroku:

  1. Utwórz katalog (jeśli jeszcze nie istnieje) o nazwie .ssh w katalogu domowym zdalnego użytkownika na zdalnym hoście.
  2. W tym katalogu utwórz plik o nazwie authorized_keys (jeśli jeszcze nie istnieje).
  3. W przypadku, gdy twój zdalny umask jest bardziej liberalny niż zwykle, spraw, aby plik nie miał możliwości zapisu grupowego: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Na koniec, w jakiś sposób skopiuj (dołącz) zawartość swojego lokalnego public key (~/.ssh/id_rsa.pub) do zdalnego pliku ~/.ssh/authorized_keys.

Załaduj klucz do agenta ssh

Jeśli załadujesz swój klucz prywatny do agenta ssh, będzie on przechowywał odszyfrowany klucz w pamięci. Chcemy tego, aby uniknąć ponownego wpisywania hasła za każdym razem, gdy wchodzimy na serwer.

Najpierw należy uruchomić agenta lub załadować do zmiennej ścieżkę uruchomionego gniazda komunikacyjnego. Uruchomienie ssh-agent na terminalu wygeneruje komendy do przypisania i ustawienia zmiennych agenta. Komendy te mogą zostać zapisane do pliku w celu użycia w innym terminalu. Alternatywnie, można uruchomić te komendy i zapomnieć o ponownym użyciu tego samego agenta w innym terminalu. np.: eval $(ssh-agent).

Wczytanie klucza jest prostą sprawą, polegającą na wykonaniu ssh-add i podaniu mu hasła.

Jeśli używasz GNOME, gnome-keyring-daemon zwykle zapewnia taką samą funkcjonalność agenta SSH jak ssh-agent, więc nie powinieneś potrzebować niczego uruchamiać. GNOME automatycznie załaduje i odblokuje klucz przy logowaniu.

Shell into the remote server without a password

Jeżeli wszystko zostało wykonane poprawnie, użycie ssh user@server nie spowoduje wyświetlenia monitu o podanie hasła. Jeśli coś jest nie tak z agentem, a nie z kluczem, zostaniesz poproszony o wpisanie hasła dla klucza, a nie hasła dla konta użytkownika.

Wszystko, co używa ssh do komunikacji, będzie działać bez wpisywania hasła do konta użytkownika, jeśli w agencie załadowany jest prawidłowy klucz. Wykorzystują to programy takie jak scp , sftp i rsync.


Uwagi:

  • Potrzebny jest tylko klucz SSHv2, ponieważ SSHv1 jest bardzo niepewny i obecnie nieużywany.
  • Potrzebny jest również tylko jeden typ klucza - wystarczy RSA lub DSA. (ed25519 i ECDSA są nowsze i nie wszędzie obsługiwane).
  • Wszystkie te kroki są takie same zarówno dla kluczy RSA jak i DSA. Jeśli używasz DSA, użyj id_dsa zamiast id_rsa, a ECDSA będzie miało id_ecdsa.
  • Serwery OpenSSH starsze niż 3.0 używały authorized_keys2 - ale jest bardzo mało prawdopodobne, że znajdziesz coś starszego niż 5.0 w użyciu.
  • Te instrukcje dotyczą tylko OpenSSH w wersji 3.0 i nowszych. lsh, ssh.com oraz inne (uniksowe i nie) serwery SSH nie są uwzględnione w tym poradniku.

Przykłady:

  • Kopiowanie klucza publicznego na zdalny host:

  • Zapisywanie zmiennych agenta do ponownego użycia (przykład rozbudowany) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent .

22
22
22
2009-07-18 17:28:34 +0000

Nie sprecyzowałeś na jakim Uniksie pracujesz, z jakim Uniksem się łączysz, jakiej powłoki używasz, jakiego wariantu SSH używasz, itd. Tak więc niektóre z tych informacji mogą wymagać drobnej korekty; jest to oparte na stosunkowo niedawnych wersjach OpenSSH, który jest używany na wielu odmianach Uniksa.

To wszystko jest z twojego lokalnego systemu desktopowego.

ssh-keygen

Upewnij się, że używasz domyślnego keyname. Sugeruję, abyś do ustawił frazę hasła na tym kluczu, 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

To zapyta cię o hasło, którego użyjesz do zalogowania się, i ustawi za ciebie autoryzację kluczy. (nie trzeba tego robić ręcznie)

Następnie, to:

`ssh-agent`

A może tak:

exec ssh-agent sh

lub:

exec ssh-agent bash

To uruchomi agenta SSH, który może przechowywać twój klucz. Na wielu współczesnych wariantach Uniksa, jeśli jesteś zalogowany graficznie, będzie to już miało miejsce. Pierwszy wariant (z backticks) umieszcza agenta ssh w tle i ustawia zmienne środowiskowe, aby z nim rozmawiać. Dwa kolejne każą agentowi uruchomić powłokę za ciebie, tak że kiedy ty opuszczasz powłokę, agent kończy pracę.

Wiele nowoczesnych wariantów Uniksa będzie już miało agenta działającego za Ciebie, szczególnie jeśli logował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.

Następnie, na koniec:

ssh-add

Poprosi o hasło; podaj mu to, które podałeś ssh-keygen. Istnieją również sposoby, aby zapytać graficznie. Możesz umieścić ssh-agent i ssh-add w skryptach logowania (konfiguracja jest różna w zależności od używanej powłoki), aby to zautomatyzować, ale niektóre warianty Uniksa (na przykład obecny Ubuntu Linux) wykonują większość z tych czynności automatycznie, więc wszystko co musisz zrobić, to utworzyć klucz i użyć ssh-copy-id, aby skonfigurować go na zdalnym hoście.

Teraz, “ssh username@server” powinno działać bez pytania o jakiekolwiek uwierzytelnienie. Za kulisami, używa klucza, który trzyma ssh-agent i prosi agenta o wykonanie magicznych sztuczek podpisywania za niego.

11
11
11
2009-07-25 03:42:47 +0000

Możliwe jest zrobienie tego w PuTTY w Windows, jak również.

Gdy masz już ustawioną parę kluczy publicznych/prywatnych (jak pokazują inne odpowiedzi tutaj) uruchom PuttyGen. W nim 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 na zapisaną sesję, do której chcesz się auto-logować i kliknij przycisk Załaduj. Następnie przejdź do zakładki Połączenie -> Dane w lewym panelu, i w “Nazwa użytkownika auto-logowania” wpisz nazwę użytkownika dla tego zdalnego serwera:

Po tym wejdź w Connection -> SSH -> Auth, i przeglądaj ppk, który zrobiłeś w PuttyGen:

Następnie wróć do strony sesji i zapisz sesję, którą załadowałeś wcześniej.

3
3
3
2009-07-18 17:39:21 +0000

Z bardzo podobnego pytania na ServerFault , poleciłbym użycie ssh-copy-id , który wykonuje wszystkie kroki związane z ustawieniem kluczy uwierzytelniania dla ciebie:

ssh-copy-id jest skryptem, który używa ssh do zalogowania się na zdalną maszynę (przypuszczalnie przy użyciu hasła logowania, więc uwierzytelnianie hasłem powinno być włączone, chyba że zrobiłeś jakieś sprytne użycie wielu tożsamości)

Zmienia również uprawnienia w home zdalnego użytkownika, ~/. ssh, oraz ~/.ssh/authorized_keys, aby usunąć możliwość zapisu grupowego (co w przeciwnym razie uniemożliwiłoby zalogowanie się, jeśli zdalny sshd ma ustawione StrictModes w swojej konfiguracji).

Jeśli podana jest opcja -i, to używany jest plik tożsamości (domyślnie ~/.ssh/identity.pub), niezależnie od tego, czy w twoim ssh-agencie są jakieś klucze.

Wszystko, co musisz zrobić, to po prostu to:

ssh-copy-id user@host

Wpisz swoje hasło raz, i jesteś dobry do pracy!

3
3
3
2009-07-18 17:57:35 +0000

Poza wszystkim, co już zostało powiedziane na temat ustawiania kluczy ssh, polecam Keychain jako nakładkę na konsolę ssh-agent, która pozwala na obsługę tylko jednego na proces systemowy zamiast na login.

Wiem, że są już narzędzia GNOME i KDE, które robią to samo, ale jeśli jesteś typem console junkie to jest to świetne (i może być używane na większości systemów Unix).

Aby go użyć, po prostu dołącz poniższe do swojego ~/.bashrc (podobnie dla 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
2
2
2
2013-02-01 16:58:45 +0000

Napisałem ten bardzo krótki tutorial po tym jak stałem się NAPRAWDĘ NAPRAWDĘ NAPRAWDĘ sfrustrowany NAPRAWDĘ długimi tutorialami, ponieważ to naprawdę jest 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
2
2
2
2009-07-18 16:55:59 +0000

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 wpisywać żadnych haseł, ponieważ chcesz wywołać ssh z poziomu skryptu powłoki.

2
2
2
2012-12-02 23:11:47 +0000

Putty posiada opcję -pw , która pozwala na utworzenie skrótu na pulpicie w ten sposób:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
```.
1
1
1
2009-07-18 17:06:33 +0000
  1. Na łączącym się hoście, uruchom ssh-keygen. (Jeśli pojawi się komunikat, że musisz określić typ, wykonaj ssh-keygen -t rsa.) Gdy pojawi się pytanie o lokalizację pliku, wybierz domyślną. Kiedy zapyta o hasło, naciśnij enter dla braku hasła.
  2. cat ~/.ssh/id_rsa.pub (lub jakakolwiek była domyślna lokalizacja pliku w ssh-keygen, chociaż musiałbyś mieć bardzo starą instalację ssh, aby była inna); skopiuj wyjście do schowka.
  3. Zaloguj się normalnie do hosta docelowego jako konto, z którym chcesz się połączyć. Edytuj plik ~/.ssh/authorized_keys (jeśli ~/.ssh nie istnieje, slogin do jakiegoś miejsca; jest to prosty, łatwy sposób, aby go utworzyć z odpowiednimi uprawnieniami). Wklej swój schowek (zawierający id_rsa.pub z drugiego hosta) do tego pliku.
0
0
0
2012-10-25 12:27:48 +0000

Jeśli chcesz zrobić to wszystko w terminalu w Linuksie:

Na hoście

cd ~/.ssh/

ssh-keygen -t {rsa|dsa} -b {1024|2048|4096} -C “some comment text if you want” -f id_ArbitraryName

Przedmioty w {} są opcjami, użyj rsa lub dsa i wybierz rozmiar bitu (większy jest bezpieczniejszy)

Następnie musisz dodać uprawnienia do plików authorized_keys i authorized_keys2.

cat id_ArbitraryName.pub > authorized_keys

cat id_AribtraryName.pub > authorized_keys2

Następnie pobierz plik id_AribtraryName na skrzynkę, z której chcesz ssh. Jeśli łączący się box jest unixowy, może być konieczny plik konfiguracyjny (w putty, ktoś wyżej to opisał).

Na łączącej się skrzynce

W pliku konfiguracyjnym - vim ~/.ssh/config

Host example.host.com # lub nazwa twojego komputera

User username

IdentityFile ~/.ssh/id_ArbitraryName

Plik konfiguracyjny wymaga uprawnień 600. Folder SSh potrzebuje 700.

Mam nadzieję, że to pomoże, jeśli napotkasz problem z configiem, który jest często pomijany.