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/.ssh
katalog z uprawnieniami 700
do .ssh
samego katalogu i 600
do authorized_keys
pliku. 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:
źródło
LogLevel DEBUG3
insshd_config
). Podejrzewam, że są to problemy z uprawnieniami, ale może być kilka powodów.[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
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ż wauth.log
.Odpowiedzi:
Konfiguracja klienta
Ustawiać
~/.ssh/config
Konfigurowanie wpisów hosta
ssh
jest naprawdę łatwe i pozwoli zaoszczędzić wiele kłopotów. Oto przykład:W tym przykładzie instalacji
digitaloceanbox
igithub
igithub.com
tak, że możemy wykonać następujące polecenia:ssh github
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
ssh
kluczyZauważ, ż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:
.ssh/digitalocean-rsa
.ssh/digitalocean-rsa.pub
Podając
ssh
klucz, upewnij się, że jest to.pub
wersja !! 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
ssh
dostępu do użytkownika root w systemie zdalnym. Zalecane jest przejściessh
do 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
ssh
jako tego użytkownika, czy użytkownika root, zalecany sposób umieszczaniassh
kluczy na serwerze to:ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
Pozwala
sshd
to 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
sshd
i ponowne uruchomienie usługi:/etc/ssh/sshd_config
PasswordAuthentication no
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/skel
katalogu. Po przypisaniu jednego użytkownika wykonaj następujące czynności:sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
/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_keys
edycji i odpowiednie uprawnienia.Debugowanie
Możesz obejrzeć
sshd
plik dziennika, aby zobaczyć, dlaczego połączenia się nie udają lub zostają odrzucone: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.
źródło
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:
Dla użytkownika mnie:
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 :
możesz ustawić:
A następnie uruchom ponownie sshd:
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 :
Następnie spróbuj w wierszu poleceń na komputerze lokalnym:
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:
To działa dobrze dla mnie. Możliwe jest również określenie, którego klucza użyć w wierszu poleceń:
Może to ułatwić debugowanie, aw wierszu polecenia powinno to zawsze działać na komputerze lokalnym.
źródło
sudo chmod 700 /home/me/
IdentityFile
Linia dostał mnie z godzinnej koleiny.Sprawdź dokładnie konfigurację demona ssh (powinna być
/etc/ssh/sshd_config
) i sprawdź: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 .
źródło
Permission denied (publickey)
Zgodnie z połączonymi dziennikami myślę, że po stronie klienta masz problemy ze znalezieniem pliku klucza prywatnego .
Najpierw sprawdź, czy plik
~/.ssh/id_rsa
istnieje na komputerze lokalnym i czy jest poprawny _ (jeśli masz więcej).Sprawdź
.ssh
uprawnienia do folderu (powinno byćdrwx------
, jeśli nie uruchomionesudo 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
ssh
za pomocą-i
parametru.Możesz uruchomić coś takiego:
ssh -i /path/to/your/private-key [email protected]
lub
ssh -i ~/.ssh/id_rsa [email protected]
Możesz uzyskać więcej informacji o ssh manpage (uruchom
man ssh
na swoim terminalu) .Pamiętaj również, że jeśli chcesz się zalogować jako
root
użytkownik, twoje konto root musi być włączone przed zalogowaniem, tworząc dla niego hasłosudo passwd root
lub 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.
źródło
Skończyłem ponowną instalację,
openssh-server
co 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.ssh
katalogu).Zakładając, że twój klient / klucze ssh są w porządku, powinieneś mieć możliwość SSH na swoim serwerze.
źródło
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
/root
został zmieniony na użytkownikadebian
. 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 /root
rozwiązało problem.HTH
źródło
Właśnie miałem bardzo podobny problem. To zadziałało dla mnie - Dodaj tę linię do / etc / ssh / sshd_config
Następnie uruchom ponownie ssh w zwykły sposób.
źródło