ssh fordert trotz ssh-copy-id zur Eingabe eines Passworts auf

27

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?

Aliud Alius
quelle
1
serverfault.com/questions/208181/... Ich bin mir nicht sicher , was Stack Politik auf Duplikate an unterschiedlichen Standorten, aber es mir scheint nicht , dass Cross-Posting eine Frage hilfreich wäre.
Ephemient
Wenn Sie nur überprüft haben , dass Sie zu schreiben ~, ~/.sshund ~/.ssh/authorized_keys, laufen ssh -vvv server.example.comund 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.
Gilles 'SO- hör auf böse zu sein'

Antworten:

31

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.

Bruce Ediger
quelle
4
Jep. ssh-copy-idsollten sich um die Berechtigungen von ~/.sshund gekümmert haben ~/.ssh/authorized_keys, aber stellen Sie auch sicher, dass Ihr Home-Verzeichnis selbst nicht für Gruppen beschreibbar ist.
Gilles 'SO- hör auf böse zu sein'
6
Das war es für mich. Ich habe ssh-copy-id verwendet, um einen RSA-Schlüssel zu senden, und wurde immer noch dazu aufgefordert. Das Laufen chmod g-w homedirauf dem Remote-Server funktionierte wie ein Zauber.
Ben Kreeger
9

Folgende Berechtigungen werden benötigt:

  • Der .sshOrdner:700 (drwx------)
  • Der öffentliche Schlüssel: 644 (-rw-r--r--)
  • Der private Schlüssel: 600 (-rw-------)
Sagar Naik
quelle
5

Ich habe dieses Problem auch kürzlich erlebt.

Es wurde korrigiert, indem die Berechtigungen des $HOMEVerzeichnisses geändert wurden . Durch einfaches Ausführen chmod g-w ~/konnte das Problem jedoch nicht behoben werden. Zusätzlich musste chmod g-w ~/ich auch die Berechtigungen für othersdas $HOMEVerzeichnis durch Ausführen ändernchmod o-wx ~/

Zusammen:

chmod g-w ~/
chmod o-wx ~/

Beachten Sie, dass ich nicht sicher bin, ob dies o-xnotwendig war. Ich habe es nur vorsichtshalber ausgeführt.

izzy.artistic
quelle
1

Das Ändern der Berechtigungen für den Ordner ~ / .ssh hat mein Problem gemäß diesem Beitrag in Super User SE gelöst .

Dogukan
quelle
0

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_keysdie 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 .

fheub
quelle
0

Ich würde dies als Kommentar posten, aber es wäre wahrscheinlich zu lang. Ich wollte nur hinzufügen, dass ssh-copy-idversucht, den öffentlichen Schlüssel von dem /.sshSpeicherort in Ihrem $HOMEOrdner zu senden .

Wenn Sie versuchen, sich sshals Root mit einem öffentlichen Schlüssel anzumelden (speichern Sie die sicherheitsrelevanten Kommentare), wird ssh-copy-idmöglicherweise versucht, sich mit dem falschen öffentlichen Schlüssel anzumelden, wenn Ihre $HOMEVariable 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.

rubynorails
quelle
0

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:

Authentication refused: bad ownership or modes for directory /some/path
gerard lapeche
quelle
Ich würde diese Nachricht nicht "sehr explizit" nennen. Es sagt Ihnen sehr vage, wonach Sie suchen sollten (falsche Eigentümer und Berechtigungen), aber es sagt Ihnen nicht, welches Verzeichnis oder welche Datei zu überprüfen ist und welche Einstellungen korrekt sein sollten.
Urhixidur
0

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)

Dinbo
quelle
0

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 sshdProtokollen gefunden ( /var/log/auth.login meinem Fall):

userauth_pubkey: unsupported public key algorithm: ssh-ed25519 [preauth]

In diesem Fall müssen Sie entweder die Unterstützung für diesen Algorithmus in Ihrer sshdKonfiguration aktivieren (was möglicherweise ein Update auf eine neuere sshdVersion erfordert ) oder Ihren Schlüssel auf einen Algorithmus umstellen, der von dem Algorithmus unterstützt wird, zu dem sshdSie eine Verbindung herstellen möchten .

Florian Brucker
quelle
0

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:

ssh -v username@your-host-ip-or-domain 

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:

cat ~/.ssh/id_rsa.pub

... und füge es der Datei authorized_keys der Fernbedienung hinzu in:

~/.ssh/authorized_keys

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:

/Users/my-user-name/.ssh/config

Hier können Sie zum Beispiel Folgendes hinzufügen:

Host mynewserver
        HostName some.IP.number.or.domain
        Port 20000 #if custom port is used and not the default 22
        User the_root
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_for_my_new_server

Dann müssen Sie nur noch ausführen:

ssh mynewserver

... und Voilà

Schurik
quelle