XXI wiek, a ciągle używamy haseł? Bez haseł jest prościej i hahahah… bezpieczniej! Wiem, wiem, koniec końców to hasło gdzieś się tam pojawi, ale…
Jeśli między systemami opartymi o Linux/Unix chcesz logować się bez podawania hasła w oparciu o uwierzytelnie kluczem prywatnym i publicznym to:
Zacznij od wygenerowania tych kluczy. Służy do tego polecenie ssh-keygen. Polecenie zaproponuje zapisanie klucza prywantego w katalogu domowym w .ssh/id_rsa, a publicznego w .ssh/id_rsa.pub.
Taka lokalizacja nie jest zła, jeśli ten prywatny klucz chcesz zachować lokalnie na swoim komputerze, a publiczny przegrać na zdalną maszynę, która powinna akceptować Twoje logowanie bez prośby o hasło:
ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/boss/.ssh/id_rsa): /home/boss/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/boss/.ssh/id_rsa Your public key has been saved in /home/boss/.ssh/id_rsa.pub The key fingerprint is: SHA256:tmvrlp4/kvgPulfa7Bl4qiD0bd2mNQwACtBLgi756gc boss@u20 The key's randomart image is: +---[RSA 3072]----+ |=. . | |o.o. . | |.+.. . | |o.. . | |... S | | E.. . o *. | | .o o o.=BO | |. o o..OX++ | |... +XX*=. | +----[SHA256]-----+
Tworząc te klucze można (i w sumie jest to zalecane), zabezpieczyć je hasłem. W takim przypadku przed skorzystaniem z klucza prywatnego będziemy musieli najpierw go otworzyć podając to hasło.
Polecenie ssh-keygen pozwala na określenie dodatkowych parametrów kluczy jak, ich algorytm, czy długość.
Gdy klucz już jest wygenerowany, to należy go rozdystrybuować na systemy, które powinny go akceptować i pozwalać logować się bez hasła. Zrobisz to poleceniem
ssh-copy-id username@host.address.com
Jeśli klucz publiczny miałby być wykorzystywany tylko na lokalnym serwerze, to należy go umieścić w pliku authorized_keys.
Jeśli masz więcej wygenerowanych kluczy, to możesz je przesyłać wybiórczo do zdalnego stystemu korzystając z opcji -i o tak:
ssh-copy-id -i ./servername username@host.address.com
gdzie servername to nazwa pliku z kluczem wygenerowanym wcześniej za pomocą ssh-keygen.
Od tej pory można się już łączyć do zdalnej maszyny przez
ssh username@host.address.com
Na docelowej maszynie plik powinien zostać umieszczony w katalogu domowym użytkownika w podkatalogu .ssh. Uwaga – ten podkatalog musi mieć w odpowiedni sposób zdefiniowane bezpieczeństwo: właścicielem musi być użytkownik, a uprawnienia powinny być odebrane dla grupy i innych (700)
Jeśli z jednego serwera chcesz łączyć się do większej liczby innych serwerów, możesz w katalogu ~/.ssh utworzyć plik config o zawartości podobnej jak ta:
# Control node Host dbserv10 HostName dbserv11 PreferredAuthentications publickey IdentityFile ~/.ssh/dbserv10 # Client node Host dbserv11 HostName dbserv11 PreferredAuthentications publickey IdentityFile ~/.ssh/dbserv11
Wykonując połączenie na konto user@hostname, zostanie pobrany od razu właściwy klucz.