Podstawową naszą cechą jest lenistwo. Dlatego dzisiaj nauczymy się jak przeprowadzić logowanie bez hasła ssh. Wykorzystamy do tego tradycyjnie parę kluczy szyfrujących. Publiczny i prywatny. Dodatkowo zabezpieczymy je frazą szyfrującą. Pokażę metody ładne i brzydkie. Zapraszam!
Logowanie za pomocą ssh
Aby zalogować się do zdalnej maszyny musimy wpisać:
ssh login@nazwa-hosta-lub-ip
Co jeśli chcemy na zdalnej maszynie wykonać polecenie, np. sprawdzić ilość zajętych pod-montowanych dysków/partycji?
ssh login@host "df -h"
Co jeśli chcemy wykonać więcej poleceń?
ssh login@host "df -h; ls -la"
Ok, ale my za każdym razem musimy podać hasło do zalogowania. Co zrobić aby go nie podawać? Bo jesteśmy leniwi, albo chcemy wykonać skrypt i nie możemy w nim podać jawnie hasła. Jest prosty sposób. Para kluczy prywatny-publiczny.
Logowanie bez hasła ssh
Jak tego dokonać? Tworzymy parę kluczy. Wpisujemy w konsoli
ssh-keygen
Następnie dostajemy kilka poleceń w konsoli:
- Wprowadzamy nazwę kluczy. Może to być nazwa np. grupy (studenci, albo nazwa serwera np. ~/.ssh/id_mojSerwer. W moim przypadku jest to ~/.ssh/hypnos
- Następnie keygen prosi o wprowadzenie hasła szyfrującego plik. Tu zaczynają się schody. Jeśli chcemy logować się bez hasła, zostawiamy tu puste pole i wciskamy ENTER. (JEST TO BRZYDKIE ROZWIĄZANIE*)
- Powtórz frazę, jeśli nie chcemy szyfrować – dajemy ENTER (bez uzupełnienia)
- Następnie zostaje już wygenerowany klucz prywatny i publiczny w folderze ~/.ssh
UWAGA(!) Zauważ, że w powyższym screenie, przy nazwie klucza nie podałem ścieżki. Przez co, hypnos i hypnos.pub zapisał się nie w katalogu .ssh tylko w domowym. Należy pamiętać aby przy podawaniu nazwy, podać ścieżkę ~/.ssh/TwojaNazwaKlucza
Czy to już działa? No nie.
Teraz należy na zdalny serwer wysłać klucz. Możemy to oczywiście zrobić dla wielu. Dzięki temu, jednym kluczem będziemy mogli logować się do wszystkich naszych zdalnych maszyn.
Czy to bezpieczne?
Jeśli ustawiliśmy hasło szyfrujące na plik prywatny to tak. Ponieważ tylko osoba która go zna może odszyfrować klucz prywatny który możne następnie zostać użyty do 'automatycznego’ logowanie się bez hasła przez ssh. Zobacz niżej „ładną metodę”.
Przesłanie klucza
Mamy kilka możliwości. Wpierw zajrzyjmy do katalogu .ssh
W moim przypadku jest tam plik:
hypnos (klucz prywatny, który należy strzec jak oka w głowie, kto go posiądzie będzie mógł logować się na nasz serwer)
hypnos.pub (klucz publiczny, który należy przesłać do serwera)
Aby móc zalogować się na zdalny serwer(-y) należy przesłać klucz publiczny TwojaNazwa.pub na serwer do folderu .ssh (twojego użytkownika) oraz dodać go do listy kluczy autoryzowanych. Jak to zrobić?
Mamy co najmniej dwa i wiele innych sposób:
cat ~/.ssh/MY_PUBLIC_KEY.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
Lub prosty ładniejszy sposób:
ssh-copy-id user@hostname.example.com
Przypadki wykorzystania:
- Autoryzacja użytkownika na zdalnej maszynie bez konieczności podania hasła
- Ułatwiony dostęp do zasobów udostępnionych za pomocą protokołu SSH
- Wykonywanie wielu poleceń bez konieczności ciągłej autoryzacji
- Dane autoryzacyjne mogą być przekazywane z każdym następnym połączeniem (Agent forwarding)
Autoryzacja kluczem
Teraz wystarczy już tylko zalogować się za pomocą ssh:
ssh login@host
Użytkownik powinien zostać automatycznie zalogowany.
Co robić jak żyć?
*Brzydkie rozwiązanie: Ok, w sytuacji – jeśli mamy gwarancje (prawie nigdy jej nie mamy) że nikt niepowołany nie będzie miał dostępu do naszego klucza prywatnego (naszego komputera/konta) to możemy to zastosować.
Przykład: Prywatny komputer w domu i klucz do serwera też lokalnego. Gdzie dostęp do komputera jest ściśle regulowany)
Rozwiązanie ładne: to wybranie frazy szyfrującej. – Tak ale teraz ktoś może powiedzieć… przecież będę musiał i tak wpisywać „hasło” w postaci tej frazy, aby odblokować dostęp. Tak to prawda, ale tylko raz podczas uruchomienia sesji w konsoli. Dzięki temu rozwiązaniu przy użyciu:
eval `ssh-agent -s` ssh-add ~/.ssh/id_kluczPrywatny
Wówczas wpiszemy hasło i już mamy dostęp z pozycji naszej sesji konsoli bez hasła do naszego serwera.
Jeden komentarz do “Logowanie bez hasła ssh”