SSH-Anmeldung mit öffentlichem Schlüssel fehlgeschlagen

7

Auf localhost wird der sshd-Dienst ausgeführt. Erstellt zwei Paare von rsa-Schlüsseln für rootund user1mit ssh-keygen. Von root / .ssh / id_rsa.pub nach user1 / .ssh / id_rsa.pub kopiert. Die Berechtigungen wurden auf 600 geändert. Versucht ssh -l user1 localhostund ssh -l root localhostbeide fehlgeschlagen, wobei die Berechtigung verweigert wurde (öffentlicher Schlüssel, tastaturinteraktiv). . Muss ich den öffentlichen Schlüssel ~/.sshfür beide Benutzer in einen Ordner kopieren ? Was ist falsch an der Konfiguration? Warum kann ich keine Verbindung zu localhost herstellen?

Datei /etc/ssh/sshd_config:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes
UsePAM no
AllowUsers user1 root
PermitRootLogin yes

In der Datei /etc/ssh/ssh_configsind unkommentierte Zeilen:

   RSAAuthentication yes
   PasswordAuthentication no
   ForwardX11 no
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no
   PubkeyAuthentication yes

BEARBEITEN 1

Ich versuche, eine Verbindung zu localhost herzustellen. Ich muss mich nur mit öffentlichem Schlüssel bei Benutzer1 anmelden können, während ich mich mit öffentlichem Schlüssel und / oder Passwort als root anmelden kann.


BEARBEITEN 2

Ich habe kopiert cp ~/.ssh/id_rsa.pub /home/user1/.ssh/authorized_keys. Geänderte Berechtigungen chmod -R 700 ~/.sshund chmod -R 700 /home/user1/.ssh. Neustart von sshd 'service ssh restart'. Aber es scheint nicht zu funktionieren.


BEARBEITEN 4

root@ubuntu:~# ssh-copy-id user1@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 34:29:b6:1b:fe:84:eb:82:85:77:87:f6:25:39:61:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied (publickey,keyboard-interactive).

root@ubuntu:~# ssh-copy-id root@localhost
Permission denied (publickey,keyboard-interactive).

Log:

# tail /var/log/auth.log

... ubuntu sshd[8476]: User root not allowed because account is locked

Ein guter SSH-Artikel zur Problembehebung: Probleme und Lösungen

J. Olufsen
quelle
Versuchen Sie, zu localhost zu ssh? Warum? Haben Sie eine Passwortabfrage erhalten?
Khaled
2
Haben Sie sich die SSHD-Protokolle des Servers angesehen?
cjc

Antworten:

7

Ich bin auf dieses Problem gestoßen, als ich versucht habe, mich bei einem Konto anzumelden, das kein Kennwort hat, obwohl ich die SSH-Schlüsselpaarauthentifizierung verwende und die Kennwortanmeldung deaktiviert habe. Die Lösung bestand darin, ein Passwort mit meinem Root-Konto festzulegen:

passwd user1
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Harm de Wit
quelle
In Ihrem Fall wäre dies ein PAM-Buchhaltungsproblem gewesen. UsePAM no ist in dieser Konfiguration vorhanden und wäre nicht anwendbar.
Andrew B
Andrew B, das stimmt nicht. Ich habe das gleiche Problem: Ich kann mich nicht anmelden, wenn ich "UsePAM no" einstelle, wenn der betreffende Benutzer kein Passwort hat. Sobald ich ein Passwort festgelegt habe, funktioniert die Anmeldung einwandfrei.
Loevborg
4
  1. Wenn ein Problem mit einem Server auftritt, ist es immer am besten, das -vFlag hinzuzufügen , z

    $ ssh -v host -l user
    
  2. In beiden oben genannten Fällen sollte der öffentliche Schlüssel ( id_rsa.pub) zur Datei ".ssh / authorized_keys" des Remotebenutzers hinzugefügt werden. In Ihrem obigen Fall sowohl an root als auch an user1. Dies kann einfach über den Befehl ssh-copy-id erfolgen .

  3. /var/log/secure enthält Hinweise darauf, warum die Anmeldung nicht erfolgreich war.

  4. Verzeichnisberechtigungen sollten 700 [rwx] (nicht 600) [rw-] sein.

rprimus
quelle
ssh-copy-id funktioniert nicht, da keine ssh-Verbindung hergestellt werden kann. Es wurde versucht, den öffentlichen Schlüssel von Benutzer1 einfach in das Stammverzeichnis zu kopieren. Die Autorisierung ist jedoch fehlgeschlagen. Wo soll der öffentliche Schlüssel von Benutzer1 kopiert werden, wenn ich eine Verbindung zum lokalen Host herstellen muss?
J. Olufsen
1
Aus dem obigen Protokollausschnitt geht hervor, dass der Root-Benutzer gesperrt ist, dh in / etc / shadow gibt es '!!' in der Passwortdatei. Geben Sie dem Root-Benutzer ein Passwort - dies sollte das Root-Konto entsperren. Wenn Sie möchten, dass Benutzer1 als 'root' in das System ssh kann, fügen Sie den Schlüssel 'id_rsa.pub' für Benutzer1 zu /root/.ssh/authorized_keys hinzu.
Rprimus
2

Ich bin vor einiger Zeit auf ein ähnliches Problem gestoßen

chmod -R 600 ~/.ssh 

Anscheinend kann ein Fehler auftreten, wenn die Dateiberechtigungen richtig sind, die Verzeichnisberechtigungen jedoch nicht die gleiche Art von Berechtigungen sind.

Ich denke auch, dass Sie die Datei von id_rsa.pub in autorisierte_keys umbenennen müssen.

Tim Brigham
quelle
Auf Debian-6 + Squeeze3 benötigen Sie definitiv die Erlaubnis 700
zupa
1

Einige Hinweise: Da Sie die Kennwortauthentifizierung speziell deaktiviert haben, können Sie sich nicht mit einem Kennwort anmelden. Ich glaube, dass Sie die zulässigen Benutzer mit anderen konfigurieren müssen (Match User ist möglicherweise der beste Weg, um vorwärts zu kommen). Außerdem müssen Sie den Root-Benutzer ausdrücklich zulassen (PermitRootLogin setzt ihn auf yes).

Peter
quelle
1

Es würde Sinn macht uns mehr Informationen über die Einstellungen zu geben , in /etc/ssh/sshd_config, insbesondere StrictModes( grep StrictModes /etc/ssh/sshd_config). StrictModesist die Einstellung, die regelt, wie sensibel sshdauf die Datei- und Ordnerberechtigungen der jeweiligen Benutzer ~/.sshund Benutzer reagiert ~/.ssh/authorized_keys. Sie haben uns auch nicht die Einstellung AuthorizedKeysFilein Ihrem gegeben sshd_config. Sehr relevant, wenn Ihr SSH-Server die Datei an einer anderen Stelle sucht, als Sie sie abgelegt haben.

Abgesehen von den bisherigen Antworten kann es dafür eine Vielzahl von Gründen geben. Das Problem ist, dass es, obwohl Sie es versucht haben, nicht genügend Informationen gibt, um sicher zu sein, was falsch ist.

Eine weitere Sache können PAM-Einschränkungen ( UsePAMin sshd_config) sein. Ubuntu hatte das irgendwann. Wenn für das Benutzerkonto kein Kennwort festgelegt wurde (nur Authentifizierung mit öffentlichem Schlüssel), ist dies nicht zulässig.

Aber lassen Sie mich Ihnen eine allgemeine Methode zum Debuggen solcher Probleme geben.

Allgemeine Fehlerbehebung von sshd

Was ich in solchen Fällen im Allgemeinen sehr nützlich finde, ist zu beginnen, sshdohne es dämonisieren zu lassen ("in den Hintergrund treten und vom Terminal trennen"). Oft sind die Protokolle nicht besonders hilfreich, insbesondere wenn Sie einen Konfigurationsfehler haben (was zumindest nicht der offensichtliche Fall ist).

Sie starten es vom Terminal aus wie folgt:

# $(which sshd) -Ddp 10222

Auf diese Weise erhalten Sie zahlreiche Debug-Ausgaben, die ansonsten (ohne -d) nicht angezeigt werden oder mit etwas Glück in den Protokollen landen.

NB: das $(which sshd)ist die beste Methode zu erfüllen sshdAnforderung eines absoluten Pfad. Andernfalls wird folgende Fehlermeldung angezeigt : sshd re-exec requires execution with an absolute path. Die -p 10222Marken sshdhören an diesem alternativ Port, die Konfigurationsdatei überschreiben - dies ist so , dass es nicht mit potenziell laufen kollidiert sshdInstanzen. Stellen Sie sicher, dass Sie hier einen freien Port auswählen.

Diese Methode hat mir viele Male beim Auffinden von Problemen geholfen, sei es bei Authentifizierungsproblemen, Leistungsproblemen oder anderen Arten von Problemen. stdoutVerwenden Sie $(which sshd) -Ddddp 10222(beachten Sie das hinzugefügte dd, um die Ausführlichkeit zu erhöhen), um eine wirklich ausführliche Ausgabe zu erhalten . Weitere Informationen zum Debuggen finden Sie hier man sshd.

Auf der Client-Seite sshkann es -v(bis zu -vvv) dauern , bis man wirklich ausführlich darüber ist, was es tut.


Die Protokollzeile

... ubuntu sshd[8476]: User root not allowed because account is locked

Hinweise darauf, dass dies das Problem ist, führen Sie Folgendes aus:

sudo passwd -u root
0xC0000022L
quelle
1

Unter CentOS kann Selinux die Authentifizierung blockieren. So lösen Sie das Problem mit dem Befehl:

restorecon -Rv ~ /. ssh
Mauricio
quelle