Nie można ssh nawet z kluczem publicznym dodanym do uprawnionych kluczy

16

Mam kroplę Digital Ocean, do której próbuję uzyskać dostęp do ssh. Nie jestem pewien, co zostało wcześniej zrobione. Próbowałem dodać mój klucz publiczny za pomocą interfejsu Digital Ocean UI. To nie działało, ciągle dostawałem permission denied (publickey).

Uzyskałem dostęp do serwera przez cyfrową konsolę oceaniczną i ręcznie dodałem mój klucz publiczny /root/.ssh/authorized_keys. Następnie spróbowałem użyć ssh ssh [email protected]. To nie zadziałało (odmowa zgody).

Próbowałem więc dodać nowego użytkownika, utworzyłem /home/me/.sshkatalog z uprawnieniami 700do .sshsamego katalogu i 600do authorized_keyspliku. Potem spróbowałem ssh [email protected]. To też nie działało.

Ponowne uruchomienie demona ssh też niczego nie zmienia.

czego mi brakuje?

Edytować:

Oto pełne wyjście ssh.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Edycja 2:

LogLevel DEBUG3 wynik:

wprowadź opis zdjęcia tutaj

Jeff
źródło
Opublikuj pełny dziennik z połączenia, zawartość sshd_config i możliwe błędy związane z ssh w dzienniku serwera.
Jakuje
@Jakuje Dodałem wynik ... Nie zauważyłem wcześniej twojego komentarza.
Jeff
Klucz został odrzucony. Sprawdź dziennik serwera pod kątem możliwych problemów (ewentualnie z LogLevel DEBUG3in sshd_config). Podejrzewam, że są to problemy z uprawnieniami, ale może być kilka powodów.
Jakuje
Mówi[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff
Jakie są uprawnienia do pliku autoryzowanych_kluczy? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Aby pełny dziennik z serwera zmodyfikować plik wspomniany powyżej, uruchom ponownie usługę ssh, połącz się ponownie i opublikuj dziennik (powinien być również w auth.log.
Jakuje

Odpowiedzi:

20

Konfiguracja klienta

Ustawiać ~/.ssh/config

Konfigurowanie wpisów hosta sshjest naprawdę łatwe i pozwoli zaoszczędzić wiele kłopotów. Oto przykład:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

W tym przykładzie instalacji digitaloceanboxi githubi github.comtak, że możemy wykonać następujące polecenia:

  1. ssh github
  2. ssh digitaloceanbox

Jeśli chcemy zalogować się jako inny użytkownik niż ten określony w pliku konfiguracyjnym, umieszczamy user@na początku:

  • ssh user@digitaloceanbox

Generowanie sshkluczy

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

Zauważ, że podałem pełną ścieżkę klucza prywatnego, który chcę wygenerować po wyświetleniu monitu ssh-keygen. Zdefiniowałem również komentarz ( -C), który pozwala mi łatwo identyfikować klucze na zdalnych komputerach.

Spowoduje to utworzenie dwóch plików:

  1. .ssh/digitalocean-rsa
    • Klucz prywatny . Nigdy tego nie udostępniaj .
  2. .ssh/digitalocean-rsa.pub
    • Klucz publiczny. To jest to, co przechowujesz na serwerze w celu uwierzytelnienia.

Podając sshklucz, upewnij się, że jest to .pubwersja !! Kiedy dodajesz do swojego ~/.ssh/config, pamiętaj, aby dodać poprawny klucz prywatny, który odpowiada kluczowi publicznemu dodanemu do systemu.


Konfiguracja serwera

Większość instalacji będzie miała włączone uwierzytelnianie klucza publicznego. Jeśli jednak zaczniesz robić wszystko, co nie chce, możesz napotkać kilka problemów. W przypadku, gdy OP ma problem, zalecam, aby OP usunął /root/.ssh/katalog, aby zacząć od nowa.

Nie jest zalecane używanie sshdostępu do użytkownika root w systemie zdalnym. Zalecane jest przejście sshdo innego użytkownika, a następnie eskalacja do rootowania przy użyciu hasła ( sudo su -).

Dodaj klucze do hosta za pomocą ssh-copy-id

Bez względu na to, czy zdecydujesz się utworzyć innego użytkownika i używać go sshjako tego użytkownika, czy użytkownika root, zalecany sposób umieszczania sshkluczy na serwerze to:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Pozwala sshdto utworzyć potrzebny katalog i pliki z niezbędnymi uprawnieniami. Oznacza to, że nie ma szans na zepsucie uprawnień lub konieczność zapamiętania szczegółów. Wystarczy użyć narzędzia, aby przesłać klucze.

Wyłącz uwierzytelnianie hasła

Biorąc to pod uwagę, po samodzielnym wprowadzeniu klucza i upewnieniu się, że można połączyć się za pomocą kluczy, zaleca się wyłączenie uwierzytelniania hasła sshdi ponowne uruchomienie usługi:

  1. Edytować /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

Co z nowymi użytkownikami?

Jeśli wyłączysz uwierzytelnianie hasła, w jaki sposób możesz wprowadzić nowych użytkowników? Jednym ze sposobów jest dodanie plików szablonów do /etc/skelkatalogu. Po przypisaniu jednego użytkownika wykonaj następujące czynności:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Edytuj wszystkie znalezione pliki /etc/skel/.ssh/, aby były puste, chyba że chcesz automatycznie wpisywać się dla każdego nowo utworzonego użytkownika.

Gdy tworzysz nowych użytkowników sudo useradd -m newuser, użytkownik ten będzie miał uprawnienia do .ssh/authorized_keysedycji i odpowiednie uprawnienia.

Debugowanie

Możesz obejrzeć sshdplik dziennika, aby zobaczyć, dlaczego połączenia się nie udają lub zostają odrzucone:

  1. sudo tail -f /var/log/auth.log

Podczas uruchamiania tego polecenia użyj innego terminala, aby spróbować się zalogować. Wiele razy dostarczone wiadomości są wystarczająco dobre, aby pomóc zlokalizować problem lub znaleźć rozwiązanie online.

EarthmeLon
źródło
1
Krok debugowania zadziałał dla mnie. Katalog główny miał niepoprawne uprawnienia (musiało to być 700)
naisanza,
12

Ssh jest dość wybredny w kwestii własności, uprawnień do plików i katalogów za pomocą kluczy ssh.

~ / .ssh / powinien być własnością właściciela i mieć 700 uprawnień. ~ / .ssh / autoryzowane_klucze powinny być własnością właściciela i mieć 600 uprawnień.

Tak więc dla roota:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Dla użytkownika mnie:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

A potem spróbuj ponownie.

Oczywiście powinieneś również sprawdzić w / etc / ssh / sshd_config, czy root może się w ogóle zalogować, czy tylko za pomocą kluczy ssh.

Jeśli masz :

PasswordAuthentication no

możesz ustawić:

PermitRootLogin yes

A następnie uruchom ponownie sshd:

/etc/init.d/sshd restart

i spróbuj ponownie.

Zauważ, że dzięki ssh demon sshd można zrestartować, nawet jeśli do tego celu używasz sesji ssh.

Patrząc na przesłane fragmenty pliku dziennika, wygląda na to, że używasz MacOSX? Czy możesz tam utworzyć nowy klucz ssh?

Co więcej, w przeszłości dowiedziałem się, że kiedy mam więcej niż jeden prywatny klucz ssh na moim komputerze lokalnym dla mojego użytkownika, czasami uniemożliwia to zdalne logowanie za pomocą ssh. Bardzo pomogło wprowadzenie wpisów na komputerze lokalnym w pliku ~ / .ssh / config, aby rozwiązać ten problem. Na przykład :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Następnie spróbuj w wierszu poleceń na komputerze lokalnym:

ssh -v my-vps

Podczas korzystania z kluczy ssh, a także bez kluczy ssh do niektórych innych loginów, oprócz wpisów z kluczami ssh możesz także zdefiniować logowanie ssh bez użycia klucza ssh w pliku ~ / ssh / config, na przykład:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

To działa dobrze dla mnie. Możliwe jest również określenie, którego klucza użyć w wierszu poleceń:

ssh -v [email protected] -i .ssh/id_rsa

Może to ułatwić debugowanie, aw wierszu polecenia powinno to zawsze działać na komputerze lokalnym.

Albert J.
źródło
Oprócz tego rozwiązania musiałem również zmienić uprawnienia do mojego folderu domowego, aby SSH działało:sudo chmod 700 /home/me/
Rg90
Jesteś ratownikiem, @ albert-j! IdentityFileLinia dostał mnie z godzinnej koleiny.
zev
4

Sprawdź dokładnie konfigurację demona ssh (powinna być /etc/ssh/sshd_config) i sprawdź:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Sprawdź także plik konfiguracyjny, aby sprawdzić, czy AllowUsers lub AllowGroups zostały ustawione, ponieważ działają one jak białe listy odpowiednio dla użytkowników i grup.

Zauważyłem też, że próbujesz dodać klucz do użytkownika root. Domyślnie logowanie użytkownika root powinno być wyłączone, ale można to również zmienić za pomocą pola PermitRootLogin .

TLin
źródło
Żaden z nich nie działa: / Nadal dostajęPermission denied (publickey)
Jeff
3

Zgodnie z połączonymi dziennikami myślę, że po stronie klienta masz problemy ze znalezieniem pliku klucza prywatnego .

  • Najpierw sprawdź, czy plik ~/.ssh/id_rsaistnieje na komputerze lokalnym i czy jest poprawny _ (jeśli masz więcej).

  • Sprawdź .sshuprawnienia do folderu (powinno być drwx------, jeśli nie uruchomione sudo chmod 700 ~/.ssh) i jego zawartości (powinno być -rw-------, jeśli nie uruchomić sudo chmod 600 ~/.ssh/*) . Zastosuj te same uprawnienia również do zdalnego komputera.

Dodatkowo możesz spróbować wymusić użycie żądanego klucza prywatnego , podając go bezpośrednio sshza pomocą -iparametru.

Możesz uzyskać więcej informacji o ssh manpage (uruchom man sshna swoim terminalu) .

Pamiętaj również, że jeśli chcesz się zalogować jako rootużytkownik, twoje konto root musi być włączone przed zalogowaniem, tworząc dla niego hasło sudo passwd rootlub narzędzie administracyjne serwera (Ubutntu ma domyślnie wyłączone konto root) . Możesz uzyskać więcej informacji na Wiki Ubuntu .

Mam nadzieję, że to pomoże.

dgonzalez
źródło
3

Skończyłem ponowną instalację, openssh-serverco naprawiło problem. Wszystkie podane rozwiązania są świetne, ale dla mnie nie zadziałały. Nie mam pojęcia, co było przyczyną problemu, ale myślę, że poprzedni programista mógł mieć problemy z konfiguracją i źle sobie z tym poradził.

Wątpię, czy będzie ktoś z tak konkretną kwestią jak moja. Jeśli jednak masz kroplę Digital Ocean, nie możesz uzyskać dostępu SSH i żadne z podanych rozwiązań nie działa, zainstaluj ponownie serwer SSH, uruchamiając te polecenia za pomocą konsoli Digital Ocean. Uwaga: jest to destrukcyjny proces i spowoduje usunięcie starych plików konfiguracyjnych w/etc/ssh/ (nie w .sshkatalogu).

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Zakładając, że twój klient / klucze ssh są w porządku, powinieneś mieć możliwość SSH na swoim serwerze.

Jeff
źródło
1

Ten problem pojawił się dla mnie przy użyciu obrazu Debiana w Digital Ocean. Jakoś podczas krótkiego procesu konfiguracji, prawdopodobnie kiedy ustawiłem hasło roota, właściciel dla /rootzostał zmieniony na użytkownika debian. Widziałem następujące w /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

Po prostu wykonanie chown root:root -R /rootrozwiązało problem.

HTH

Sean Brady
źródło
0

Właśnie miałem bardzo podobny problem. To zadziałało dla mnie - Dodaj tę linię do / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Następnie uruchom ponownie ssh w zwykły sposób.

Bodycheetah
źródło