Ich verwende die Authentifizierung mit öffentlichen Schlüsseln auf einem Remote-Server seit einiger Zeit sowohl für die Verwendung als Remote-Shell als auch für sshfs-Bereitstellungen. Nachdem ich einen Umount meines sshfs-Verzeichnisses erzwungen hatte, bemerkte ich, dass ssh mich zur Eingabe eines Passworts aufforderte. Ich habe versucht, die fernen .ssh / authorized_keys von allen Erwähnungen des lokalen Rechners zu entfernen, und habe den lokalen Rechner von Verweisen auf den fernen Rechner befreit. Ich wiederholte dann meine ssh-copy-id, es forderte mich zur Eingabe eines Passworts auf und kehrte normal zurück. Aber siehe da, wenn ich zum Remote-Server schicke, werde ich immer noch zur Eingabe eines Passworts aufgefordert. Ich bin ein wenig verwirrt, was das Problem sein könnte, irgendwelche Vorschläge?
27
~
,~/.ssh
und~/.ssh/authorized_keys
, laufenssh -vvv server.example.com
und berichten über den Ausgang (anonymisieren die Host- und Benutzernamen , wenn Sie möchten). Wenn Sie über Root-Zugriff auf dem Server verfügen, überprüfen Sie die Protokolleinträge, die beim Versuch einer öffentlichen Schlüsselanmeldung erstellt wurden.Antworten:
sshd verrückt nach Berechtigungen für $ HOME, $ HOME / .ssh (beide Verzeichnisse) und für $ HOME / .ssh / authorized_keys.
Eine meiner Linux-Boxen erhielt die Berechtigung drwxrwxrwx für mein $ HOME-Verzeichnis. Eine Arch-Linux-Box würde sich erst dann mit öffentlichen Schlüsseln anmelden, wenn ich die 'w'-Berechtigung für eine andere Gruppe in meinem $ HOME-Verzeichnis entfernt hätte.
Versuchen Sie, $ HOME und $ HOME / .ssh / so einzurichten, dass sie restriktivere Berechtigungen für Gruppen und andere Benutzer haben. Sehen Sie, ob sshd das nicht zulässt.
quelle
ssh-copy-id
sollten sich um die Berechtigungen von~/.ssh
und gekümmert haben~/.ssh/authorized_keys
, aber stellen Sie auch sicher, dass Ihr Home-Verzeichnis selbst nicht für Gruppen beschreibbar ist.chmod g-w homedir
auf dem Remote-Server funktionierte wie ein Zauber.Folgende Berechtigungen werden benötigt:
.ssh
Ordner:700 (drwx------)
644 (-rw-r--r--)
600 (-rw-------)
quelle
Ich habe dieses Problem auch kürzlich erlebt.
Es wurde korrigiert, indem die Berechtigungen des
$HOME
Verzeichnisses geändert wurden . Durch einfaches Ausführenchmod g-w ~/
konnte das Problem jedoch nicht behoben werden. Zusätzlich musstechmod g-w ~/
ich auch die Berechtigungen fürothers
das$HOME
Verzeichnis durch Ausführen ändernchmod o-wx ~/
Zusammen:
Beachten Sie, dass ich nicht sicher bin, ob dies
o-x
notwendig war. Ich habe es nur vorsichtshalber ausgeführt.quelle
Das Ändern der Berechtigungen für den Ordner ~ / .ssh hat mein Problem gemäß diesem Beitrag in Super User SE gelöst .
quelle
Tritt das Problem auch bei parallelen Anmeldungen auf, dh wenn Sie versuchen, sshfs während einer offenen ssh-Sitzung bereitzustellen? Wenn nicht, dann würde ich vermuten, dass Sie Ihr Home-Verzeichnis verschlüsselt haben? In diesem Fall ist
$HOME/.ssh/authorized_keys
die Verwendung auf dem Remotecomputer erst nach Ihrer ersten Anmeldung (unter Verwendung Ihres Kennworts) möglich.Eine Erklärung und die erforderliche Problemumgehung finden Sie unter https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshooter .
quelle
Ich würde dies als Kommentar posten, aber es wäre wahrscheinlich zu lang. Ich wollte nur hinzufügen, dass
ssh-copy-id
versucht, den öffentlichen Schlüssel von dem/.ssh
Speicherort in Ihrem$HOME
Ordner zu senden .Wenn Sie versuchen, sich
ssh
als Root mit einem öffentlichen Schlüssel anzumelden (speichern Sie die sicherheitsrelevanten Kommentare), wirdssh-copy-id
möglicherweise versucht, sich mit dem falschen öffentlichen Schlüssel anzumelden, wenn Ihre$HOME
Variable auf einen anderen Wert als festgelegt ist/root
(z. B. auf das Basisverzeichnis Ihres normalen Benutzers) ) wird der Root-Benutzer aufgefordert, da der öffentliche Schlüssel des Root-Benutzers nicht auf dem Remote-System installiert ist.Sie können den folgenden Einzeiler verwenden, um den genauen öffentlichen Schlüssel anzugeben:
pub="$(cat /root/.ssh/id_rsa.pub)"; ssh user@remotehost "echo $pub >> .ssh/authorized_keys; chmod 700 .ssh; chmod 600 .ssh/authorized_keys"
Ich habe dieses Szenario ein paar Mal in freier Wildbahn erlebt (einschließlich heute Morgen) und dachte, ich würde versuchen, meine 2 Cent einzuspielen, nur für den Fall, dass sich jemand in der gleichen Situation befindet.
quelle
Wie andere erwähnte Mitwirkende ist dies wahrscheinlich eine Erlaubnisfrage.
Die beste Möglichkeit, dies zu diagnostizieren, besteht darin, den SSH-Dämon auf dem Remote-Server mit aktivierter Debug-Option neu zu starten - normalerweise mit der Option "-d". Die OpenSSH-Daemon-Nachricht ist sehr explizit. Beispielsweise sehen Sie Nachrichten wie:
quelle
Der Grund, warum der öffentliche Schlüssel nach dem Neustart nicht überlebte, war, dass mein Server-Ausgangsverzeichnis verschlüsselt war. (Sie tun dies während der Installation des Servers)
quelle
Ein weiteres mögliches Problem besteht darin, dass der Server Ihren Schlüsselalgorithmus nicht unterstützt. In meinem Fall habe ich die folgenden Meldungen in meinen
sshd
Protokollen gefunden (/var/log/auth.log
in meinem Fall):In diesem Fall müssen Sie entweder die Unterstützung für diesen Algorithmus in Ihrer
sshd
Konfiguration aktivieren (was möglicherweise ein Update auf eine neueresshd
Version erfordert ) oder Ihren Schlüssel auf einen Algorithmus umstellen, der von dem Algorithmus unterstützt wird, zu demsshd
Sie eine Verbindung herstellen möchten .quelle
Da diese Frage bei der Suche nach diesem Verhalten zu den ersten Suchergebnissen gehört, werde ich auch meine Lösung hinzufügen:
In meinem Fall hatte es nichts mit den Berechtigungen zu tun. Aus irgendeinem Grund (ich habe mich nicht darum gekümmert, herauszufinden, aus welchem Grund ich tatsächlich eine schnelle Lösung gefunden habe) hat das Programm bei der Ausführung des Befehls ssh nicht nach der richtigen Identitätsdatei gesucht. Eine Lösung bestand darin, auf dem Remote-Server manuell einen SSH-Schlüssel hinzuzufügen, den das SSH-Programm zu verwenden versuchte. Sie können beobachten, was das SSH-Programm beim Ausführen des Befehls tut, indem Sie dem Befehl -v hinzufügen:
Dann greifen Sie einfach auf Ihren lokalen Computer zu und suchen nach einem öffentlichen Schlüssel, für den das SSH-Programm eine Identitätsdatei / einen privaten Schlüssel sucht, beispielsweise auf einem Mac:
... und füge es der Datei authorized_keys der Fernbedienung hinzu in:
Eine andere, in meinem Fall bessere Lösung war das Hinzufügen eines benutzerdefinierten Hosts in meiner lokalen ssh-Konfigurationsdatei. Auf meinem Mac ist es:
Hier können Sie zum Beispiel Folgendes hinzufügen:
Dann müssen Sie nur noch ausführen:
... und Voilà
quelle