Dlaczego dostaję „Odmowa zezwolenia (publickey)” podczas próby połączenia SSH z lokalnego Ubuntu do serwera Amazon EC2?

218

Mam instancję aplikacji działającej w chmurze na instancji Amazon EC2 i muszę połączyć ją z mojego lokalnego Ubuntu. Działa dobrze na jednym z lokalnych Ubuntu, a także na laptopie. Otrzymałem komunikat „Odmowa zezwolenia (publickey)” podczas próby uzyskania dostępu do SSH do EC2 na innym lokalnym Ubuntu. To dla mnie takie dziwne.

Myślę o problemach z ustawieniami zabezpieczeń w Amazon EC2, który ma ograniczony dostęp adresów IP do jednej instancji lub certyfikatu może wymagać regeneracji.

Czy ktoś zna rozwiązanie?

Vorleak Chy
źródło
11
„Kiedyś działał wcześniej” - przed czym ?
womble
Mam instancję Elastic Beanstalk EC2. Według stanu na sierpień 2013 r. Rozwiązaniem było uzyskanie dostępu do instancji jako użytkownik ec2, który sprawił, że błąd Permission Denied (publicKey) zniknął. Viz: ssh -i ./mike-key-pairoregon.pem [email protected]. Oczywiście musisz wykonać wszystkie inne czynności, jak na stackoverflow.com/questions/4742478/…
mikemay 1'13
3
Ten problem występuje, jeśli określono nieprawidłową nazwę użytkownika. Dokumenty aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/... ) obecnie podają przykład z nazwą użytkownika ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], podczas gdy moje (stare) pole ubuntu ma nazwę użytkownika ubuntu, więc kiedy skorzystałem z przykładu, otrzymałem ten błąd, zmiana na prawidłową nazwę użytkownika rozwiązuje się.
david.barkhuizen
@ david.barkhuizen, twój komentarz mi pomógł. Miałem podobny problem; okazało się, że miało to związek z nazwą użytkownika. Dzięki.
NaijaProgrammer

Odpowiedzi:

143

Pierwszą rzeczą do zrobienia w tej sytuacji jest skorzystanie z -vopcji ssh, aby zobaczyć, jakie typy uwierzytelnienia są wypróbowane i jaki jest wynik. Czy to pomaga oświecić sytuację?

W aktualizacji swojego pytania wspominasz „na innym lokalnym Ubuntu”. Czy skopiowałeś klucz prywatny ssh na inny komputer?

Greg Hewgill
źródło
2
Skopiowałem klucz prywatny ssh na inny komputer, jak sugerował @Greg. To teraz działa. Dzięki!
Vorleak Chy,
3
Do Twojej wiadomości możesz użyć flagi -i, aby wskazać ścieżkę kluczy bez ich instalowania
Jorge Vargas
20
W moim przypadku był przy użyciu BitNami .ami i nie zdawali sobie sprawy, że trzeba zalogować się jako użytkownik o nazwie BitNami, jak: ssh -i <keyfile> bitname@<ec2-address>. Niestety ta -vopcja nie pomogła mi znaleźć tego, ale nadal bardzo przydatne jest sprawdzenie!
Matt Connolly,
7
cóż, w moim przypadku użyłem niewłaściwej nazwy użytkownika. używał „ubuntu” zamiast „bitnami”. jak to: ssh -i key.pem bitnami @ hostaddress
Lucas
3
Dobrym tropem jest również sam zdalny węzeł, spójrz /var/log/auth.log, czasem zobaczysz następujące komunikaty: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keyslub coś innego
Jonas Libbrecht 31.01.17
76

Jak nie zostało to wyraźnie wspomniane, sshd jest domyślnie bardzo restrykcyjne w zakresie uprawnień do authorized_keysplików. Tak więc, jeśli authorized_keysjest zapisywalny dla każdego innego niż użytkownik lub może być zapisany przez kogoś innego niż użytkownik, odmówi uwierzytelnienia (chyba że sshd jest skonfigurowane z StrictModes no)

Rozumiem przez „można nadawać się do zapisu” jest to, że jeśli którykolwiek z katalogów nadrzędnych jest zapisywalny dla kogokolwiek innego niż użytkownik, użytkownicy uprawnieni do modyfikowania tych katalogów mogą zacząć modyfikować uprawnienia w taki sposób, aby mogli modyfikować / zastępować klucze autoryzowane.

Ponadto, jeśli /home/username/.sshkatalog nie jest własnością użytkownika, a zatem użytkownik nie ma uprawnień do odczytu klucza, możesz napotkać problemy:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Pamiętaj, że Jane nie jest właścicielem .sshpliku. Napraw to przez

chown -R jane:jane /home/jane/.ssh

Tego rodzaju problemy z uprawnieniami systemu plików nie pojawią się ssh -v, a nawet nie pojawią się w logach sshd (!), Dopóki nie ustawisz poziomu dziennika na DEBUG.

  • Edit /etc/ssh/sshd_config. Chcesz LogLevel DEBUGgdzieś tam czytać . Załaduj ponownie serwer SSH za pomocą mechanizmu dostarczonego przez dystrybucję. ( service sshd reloadw RHEL / CentOS / Scientific.) Pełen wdzięku przeładowanie nie spowoduje porzucenia istniejących sesji.
  • Spróbuj uwierzytelnić ponownie.
  • Dowiedz się, gdzie idą dzienniki instalacji uwierzytelniania i przeczytaj je. (IIRC, /var/log/auth.logna dystrybucjach opartych na Debianie; /var/log/securena RHEL / CentOS / Scientific.)

Znacznie łatwiej jest ustalić, co się dzieje z wyjściem debugowania, które obejmuje błędy uprawnień systemu plików. Pamiętaj, aby po zakończeniu przywrócić zmianę /etc/ssh/sshd_config!

Kjetil Joergensen
źródło
5
To, co mnie
skłoniło do zapisania,
7
FWIW poprawne uprawnienia do plików kluczy to 600 (patrz tutaj )
Matt Lyons,
1
Tak, mój plik .authorized_keys był możliwy do zapisu przez grupę, więc odmówił przyjęcia.
Aditya MP
2
Uderzyłem głową o ścianę! Mój folder użytkownika miał złe uprawnienia. Dziękuję Ci!
XJones,
4
to samo dotyczy samego folderu ~ / .ssh. może pojawić się następujący komunikat o błędzie:Authentication refused: bad ownership or modes for directory
Jewgienij M.
37

Otrzymałem ten błąd, ponieważ zapomniałem dodać -lopcję. Moja lokalna nazwa użytkownika nie była taka sama jak w systemie zdalnym.

To nie odpowiada na twoje pytanie, ale przybyłem tutaj, szukając odpowiedzi na mój problem.

pkmk
źródło
25
ssh host -l userjest taki sam jak ssh user@host, prawda?
Znarkus
3
@Znarkus tak, to jest to samo.
cregox,
Tak, to rozwiązało mój problem, powodując również błąd „Odmowa zezwolenia (publickey)”.
Brooks Moses
1
To był dla mnie problem. Spodziewałem się, że użytkownik „root” zadziała, ale korzystałem z obrazu Ubuntu EC2, który miał domyślnego użytkownika „ubuntu”.
Cerin
20

Otrzymałem ten komunikat w nowej instancji opartej na Ubuntu AMI. Używałem opcji -i, aby dostarczyć PEM, ale nadal wyświetlało „Odmowa zezwolenia (publickey)”.

Mój problem polegał na tym, że nie używałem właściwego użytkownika. Uruchamiając ssh z Ubuntu @ ec2 ... działało to normalnie.


źródło
Tak ... Uruchomiłem polecenie sudo, dlatego nie działało.
thaddeusmt
16

Jest coś łatwiejszego do odczytania niż ssh -v(moim zdaniem oczywiście) tail -f /var/log/auth.log. To powinno być uruchomione na serwerze, z którym próbujesz się połączyć, podczas próby połączenia. Wyświetli błędy w postaci zwykłego tekstu.

Pomogło mi to rozwiązać problem:

Użytkownik [nazwa użytkownika] z witryny xx.yy.com jest niedozwolony, ponieważ żadnej grupy użytkowników nie ma na liście w AllowGroups

Znarkus
źródło
to dziennik serwera. dla RHEL / CentOS 7:tail -f /var/log/secure
Gianfranco P.
10

Sprawdź plik / etc / ssh / sshd_config . Tam znajdź wiersz, który mówi

PasswordAuthentication no

Ta linia musi zostać zmodyfikowana, aby powiedzieć „tak” zamiast „nie”. Następnie uruchom ponownie serwer sshd.

sudo /etc/init.d/ssh restart
Sudipta Chatterjee
źródło
18
To spowodowałoby, że serwer byłby mniej bezpieczny.
Znarkus
To był mój problem: chciałem założyć konto dla innego użytkownika, uwierzytelniając się za pomocą hasła. Chciałem też móc zalogować się jako użytkownik z miejsc, w których nie miałem klucza prywatnego.
Daniel
1
Jak możemy przejść /etc/ssh/sshd_config- jeśli nie możemy nawet dostać się na serwer?
kyo
Aby dostać się do samego serwera, musisz użyć pliku PEM, który podali podczas tworzenia instancji. Instrukcje idą potem.
Sudipta Chatterjee
sudo service sshd reload
Działa
6

Być może nie dotyczy aktualnego plakatu, ale może pomóc innym, którzy znajdą to podczas wyszukiwania odpowiedzi na podobne sytuacje. Zamiast zezwalać Amazonowi na generowanie pary kluczy ssh, zalecamy przesłanie własnego, standardowego, domyślnego publicznego klucza ssh do Amazon i określenie go podczas uruchamiania instancji EC2.

Pozwala to upuścić składnię typu „-i” w ssh, użyć rsync ze standardowymi opcjami, a także pozwala używać tego samego klucza ssh we wszystkich regionach EC2.

Napisałem artykuł o tym procesie tutaj:

Przesyłanie osobistych kluczy ssh do Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys

Eric Hammond
źródło
+1 Sprawdziłem to pytanie właśnie z tego powodu.
John Riselvato
Widzę ten błąd podczas śledzenia Twojego artykułu. regiony = $ (ec2-opisz-regiony | wytnij -f2) Wymagana opcja '-K, brak klucza -prywatnego klucza (-h do użycia)
KashifAli
@ KashifAli Będziesz chciał skonfigurować poświadczenia narzędzia wiersza polecenia interfejsu EC2 API, abyś nie zawsze musiał przekazywać poświadczenia w każdym wierszu polecenia.
Eric Hammond
5

O dziwo, moim problemem okazało się to, że serwer został zrestartowany i wydano mu nową nazwę DNS. Użyłem starej nazwy DNS. Wiem, że to brzmi głupio, ale zrozumienie tego zajęło mi trochę czasu.

Patrick Collins
źródło
Dziękuję Ci! To był dokładnie mój problem. Nie zdawałem sobie sprawy, że nazwa DNS zmieniła się po ponownym uruchomieniu instancji.
Tim Swast,
W moim przypadku adres URL * .compute.amazonaws.com zmienił się, gdy przypisałem elastyczny adres IP.
Geoffrey Booth
2

Jeśli próbujesz połączyć się z telefonem CyanogenMod z uruchomionym Dropbear, powinieneś uruchomić następujące linie, aby upewnić się, że wszystko ma odpowiednie uprawnienia:

chmod 600 /data/dropbear/.ssh/authorized_keys

lub

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

i

chmod 755 /data/dropbear/ /data/dropbear/.ssh

To naprawiło to dla mnie, w przeciwnym razie nic nie może się połączyć.

Naftuli Kay
źródło
„podczas próby uzyskania dostępu do SSH do EC2 na innym lokalnym Ubuntu.”
Grammargeek,
1
Co jeśli nie mam kluczy autoryzowanych ?
IgorGanapolsky
2

Jeśli używasz CentOS 5, może chcesz ustawić StrictModes now /etc/ssh/sshd_config. Udostępniam katalog / home za pomocą NIS / NFS i poprawnie ustawiłem wszystkie uprawnienia, ale zawsze monitowało mnie o hasło. Po ustawieniu StrictModes noproblem zniknął!

uichin
źródło
1

Odpowiedź Grega wyjaśnia, jak lepiej rozwiązywać problemy, ale faktyczny problem polega na tym, że po jednej stronie transakcji (kliencie) jest ustawiony klucz ssh, który próbuje uwierzytelnić klucz publiczny, a nie uwierzytelnienie oparte na haśle. Ponieważ nie masz odpowiedniego klucza publicznego w instancji EC2, to nie zadziała.

Cian
źródło
2
Jak rozwiązać problem?
Julien Grenier
1

Miałem ten sam problem i po wypróbowaniu mnóstwa rozwiązań, które nie działały, otworzyłem port SSH w zaporze routera (panel sterowania zapory routera to bałagan, więc trudno powiedzieć, co się dzieje). W każdym razie to naprawiło :)

Super cholernie denerwujące, że błąd, który otrzymujesz, to odmowa zezwolenia, co sugeruje, że nawiązano połączenie, grr.

chichilatte
źródło
1

Miałem ten sam problem, mimo że podobno wykonałem wszystkie kroki, w tym

$ ec2-authorize default -p 22

Jednak zacząłem swoją instancję w regionie us-west-1. Dlatego powyższe polecenie powinno również to określić.

$ ec2-authorize default -p 22 --region us-west-1

Po tym poleceniu mogłem ssh do instancji. Spędziłem trochę czasu, zanim zdałem sobie sprawę z problemu i mam nadzieję, że ten post pomoże innym.

Ajit Verma
źródło
0

Jest to rzadki przypadek, ale jeśli masz włączony selinux i używasz nfs dla katalogu z uprawnionymi kluczami (np. Współdzielone katalogi domowe), musisz albo wyłączyć selinux (niezalecane ze względów bezpieczeństwa, ale możesz go tymczasowo wyłączyć aby sprawdzić, czy to powoduje problem) lub pozwól, aby selinux używał katalogów domowych nfs. Nie jestem pewien szczegółów, ale to zadziałało dla mnie setsebool -P use_nfs_home_dirs 1

Reese
źródło
0

Właśnie ten problem wystąpił po nieumyślnym dodaniu uprawnień do zapisu grupowego do katalogu domowego użytkowników.

Odkryłem, że to była przyczyna, uruchamiając tail -f /var/log/securesię na maszynie i widząc błąd Authentication refused: bad ownership or modes for directory /home/<username>.

Jacob Tomlinson
źródło