ssh nigdy nie prosi o hasło

14

Jakoś mój SSH nigdy nie chce mnie prosić o hasło.

Więc ustawiłem VPS na jakimś losowym serwerze gdzieś na świecie i chcę się z nim połączyć za pomocą ssh.

Mogę skonfigurować klucz, ale kiedy to zrobię:

ssh -l some-user IP

Dostaję błąd:

Received disconnect from ##.##.##.##: 2: Too many authentication failures for some-user

Kiedy patrzę na szczegóły, widzę, że hasło jest jedną z opcji:

debug1: Offering RSA public key: some-user@computer
debug1: Authentications that can continue: publickey,password

Jednak SSH nigdy nie prosi mnie o hasło. Próbuje 5 razy z podejrzeniem metody publickey, a następnie kończy się niepowodzeniem. Dlaczego ssh nie spróbuje z hasłem ?!

Na wszelki wypadek mój plik ssh_config ma:

PasswordAuthentication yes

Pełny dziennik

ssh -v -l root ##.##.##.##
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/someuser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ##.##.##.## [##.##.##.##] port 22.
debug1: Connection established.
debug1: identity file /home/someuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/someuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_dsa type -1
debug1: identity file /home/someuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2 Ubuntu-6
debug1: match: OpenSSH_6.2p2 Ubuntu-6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA XX:XX:...:XX:XX
debug1: Host '##.##.##.##' is known and matches the ECDSA host key.
debug1: Found key in /home/someuser/.ssh/known_hosts:38
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/someuser/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
Received disconnect from ##.##.##.##: 2: Too many authentication failures for root
Alexis Wilke
źródło

Odpowiedzi:

17

Spróbuj zalogować się przy wyłączonym uwierzytelnianiu klucza publicznego, używając

ssh -o PubkeyAuthentication=no root@newserver
Klaus-Dieter Warzecha
źródło
W porządku! To się udało! Próbowałem „przeciwnie” bez powodzenia… (tj -o PasswordAuthentication=yes.). Ale tego szukałem.
Alexis Wilke
3
@AlexisWilke Cieszę się, że to działa! Ale proszę przeczytaj też odpowiedź Olli. Zdecydowanie ma rację, ponieważ wciąż coś jest z tobą nie tak .ssh/config. To -o PubkeyAuthentication=nonie jest miłe jako trwałe rozwiązanie.
Klaus-Dieter Warzecha
Ta sztuczka (-o PubkeyAuthentication = nie) działała dobrze na maszynie z kilkoma plikami tożsamości.
Valerio Schiavoni,
17

Najprawdopodobniej plik zawiera więcej niż jedną identityfilelinię .ssh/config.

Nawet jeśli masz identityfile w hostkonfiguracji, jest stosowany globalnie. Oznacza to, że sshwypróbowuje każdy plik tożsamości (tj. Klucz publiczny) na każdym hoście, zanim poprosi o podanie hasła z serwera.

Możesz to naprawić przez

  1. Usuwanie wszystkich oprócz jednego identityfile linii lub
  2. Dodawanie PubkeyAuthentication no do .ssh/configlub
  3. Wykonywanie ssh z -o PubkeyAuthentication=no parametrem.

Od man 5 ssh_config:

PubkeyAuthentication
    Specifies whether to try public key authentication.  The argument to this
    keyword must be “yes” or “no”.  The default is “yes”.  This option applies 
    to protocol version 2 only.

IdentityFile
    ...
    It is possible to have multiple identity files specified in configuration
    files; all these identities will be tried in sequence.  Multiple 
    IdentityFile directives will add to the list of identities tried (this 
    behaviour differs from that of other configuration directives).

Kilka ogólnych instrukcji dotyczących kluczy publicznych:

  1. Zasadniczo powinieneś mieć tylko jeden klucz prywatny na klienta (stację roboczą) i umieścić pasujący klucz publiczny na wszystkich serwerach, do których klient powinien mieć dostęp. Innymi słowy, współdziel klucz publiczny między serwerami i nigdy nie używaj tego samego klucza prywatnego na wielu urządzeniach.
  2. Zawsze generuj parę kluczy na swoim urządzeniu i przesyłaj tylko klucz publiczny. W ten sposób, nawet jeśli serwer jest zagrożony, Twój klucz prywatny jest nadal bezpieczny. Może się to zdarzyć w zaskakujący sposób - na przykład poprzez tworzenie kopii zapasowych.
  3. Jeśli ktoś inny zarządza serwer, ty powinny stanowić klucz publiczny dla nich; powinny one nie generują parę kluczy i wysłać klucz prywatny do ciebie. W ten sposób nie mogą podszywać się pod Ciebie za pomocą Twojego klucza (oczywiście zwykle mogą robić, co chcą). Ponadto w przypadku klucza publicznego tylko integralność (tj. Ktoś nie zmienił klucza publicznego) musi być chroniony; w przypadku klucza prywatnego należy zachować poufność (tzn. nikt nie uzyskał klucza) i nie można mieć absolutnej pewności, że nie został naruszony.
  4. Naruszenie bezpieczeństwa serwera nie zagraża innym serwerom, nawet jeśli używasz tego samego klucza prywatnego do łączenia się z wieloma serwerami (z wyjątkiem sytuacji, gdy przesłałeś ten klucz prywatny do serwera. Nigdy tego nie rób.)
  5. Naruszenie bezpieczeństwa stacji roboczej i tak ujawni twoje klucze prywatne. Posiadanie wielu kluczy prywatnych nie pomaga w tym (z wyjątkiem sytuacji, gdy masz różne, silne hasła i nie wszystkie są dostępne dla atakującego).

Istnieją pewne wyjątki, ale nie za dużo.

Olli
źródło
2
Aaaa! Mam „zbyt wiele” plików identyfikujących i sprawdza 5 z nich i zatrzymuje się. Rozumiem! To wyjaśnia wszystko. Przypuszczam, że powinienem przenieść wszystkie z nich do podfolderu, aby nie zostały automatycznie znalezione, a funkcja hasła działałaby ponownie automatycznie ...
Alexis Wilke
3
Jeśli to możliwe, powinieneś / mógłbyś używać tylko jednego klucza publicznego dla każdej usługi, której potrzebujesz. Bardzo rzadko istnieje powód, aby robić to w jakikolwiek inny sposób. Jeśli ktoś ukradnie twój klucz publiczny (zawartość authorized_keys), nie może nic z tym zrobić. A jeśli wszystkie klucze prywatne ( id_rsa/ id_dsa) znajdują się na tym samym komputerze, użycie więcej niż jednego nie ma znaczenia.
Olli
4

Twój lokalny ssh nie powinien prosić o hasło, serwer ssh na drugim końcu powinien. Prawdopodobnie serwer skonfigurowano tak, aby nie akceptował uwierzytelniania za pomocą hasła. Mój też nie poprosiłby cię o hasło.

Marc
źródło
1
Drugi serwer to zupełnie nowy serwer, który każe ci to zrobić. Mało tego, mój partner nie mógł się zalogować! Na moim komputerze jest coś podejrzanego, co uniemożliwia testowanie hasła ... W rzeczywistości, jeśli spojrzysz na logi, autoryzowane uwierzytelnienie MUSI zawierać „hasło”. Dlatego mój lokalny klient ssh POWINIEN zapytać mnie o hasło, ale postanawia je pominąć.
Alexis Wilke
Łatwiej jest zrozumieć, dlaczego serwer nie monituje o hasło, niż dowiedzieć się, dlaczego klient nie oferuje tej opcji, jeśli serwer je oferuje. Na ich końcu znajduje się wiele opcji konfiguracji, a kilka jest cholernych. Możliwe, że ktoś z twoim adresem IP próbował zalogować się zbyt wiele razy bez prawidłowego hasła, a przyszłe próby z twojego adresu IP zostały wyłączone. Strzelaj, właśnie przeczytałem odpowiedź Olli. Otóż ​​to.
Marc