Ich arbeite über die URL, die ich hier gefunden habe:
Mein SSH-Client ist Ubuntu 64 Bit 11.10 Desktop und mein Server ist Centos 6.2 64 Bit. Ich habe die Anweisungen befolgt. Ich erhalte immer noch eine Passwortabfrage für ssh.
Ich bin mir nicht sicher, was ich als nächstes tun soll.
ssh
key-authentication
Thom
quelle
quelle
chmod 700
/var/log/auth.log
werden Sie darüber informiert, warum die Anmeldung fehlschlägt./var/log/secure
.0700
die Antwort, aber als ich esssh -v
auf der Client-Seite tat, zeigte es keinen Fehler an, der damit zusammenhängt, warum der Schlüssel nicht akzeptiert wurde. Es wurde nur gesagt, dass es als nächstes versucht wurde, ein Passwort zu verwenden, obwohl mein Client einen öffentlichen Schlüssel gesendet hatte. Wie erwarten sie, dass wir Probleme ohne Fehlerinformationen vom Server diagnostizieren?Antworten:
Stellen Sie sicher, dass die Berechtigungen für das
~/.ssh
Verzeichnis und dessen Inhalt korrekt sind. Als ich meine SSH-Schlüsselauthentifizierung zum ersten Mal eingerichtet habe, war der~/.ssh
Ordner nicht richtig eingerichtet, und er hat mich angeschrien.~
, Ihr~/.ssh
Verzeichnis und die~/.ssh/authorized_keys
Datei auf dem Remotecomputer dürfen nur von Ihnen geschrieben werden:rwx------
undrwxr-xr-x
sind in Ordnung, aberrwxrwx---
nicht gut¹, auch wenn Sie der einzige Benutzer in Ihrer Gruppe sind (wenn Sie numerische Modi bevorzugen:700
oder755
nicht775
). .Wenn
~/.ssh
oderauthorized_keys
eine symbolische Verknüpfung ist, wird der kanonische Pfad (mit erweiterten symbolischen Verknüpfungen) überprüft .~/.ssh/authorized_keys
Datei (auf dem Remotecomputer) muss lesbar sein (mindestens 400), aber Sie müssen auch beschreibbar sein (600), wenn Sie weitere Schlüssel hinzufügen möchten.rw-------
, dh600
.restorecon -R -v ~/.ssh
(siehe zB Ubuntu-Fehler 965663 und Debian-Fehlerbericht # 658675 ; dies ist in CentOS 6 gepatcht ).¹ Mit Ausnahme einiger Distributionen (Debian und Derivate), die den Code gepatcht haben, um die Beschreibbarkeit von Gruppen zu ermöglichen, wenn Sie der einzige Benutzer in Ihrer Gruppe sind.
quelle
/home/USER
muss700
oder755
ssh -v user@host
.chmod -R 700 ~/.ssh
arbeitete für mich, um die Einschränkungen dieser Antwort zu erfüllen (RHEL 7)Wenn Sie Root-Zugriff auf den Server haben, können Sie solche Probleme auf einfache Weise lösen, indem Sie sshd im Debug-Modus ausführen, indem Sie etwas wie
/usr/sbin/sshd -d -p 2222
auf dem Server ausgeben (vollständiger Pfad zur ausführbaren Datei von sshd erforderlich,which sshd
kann helfen) und dann eine Verbindung vom Client mit herstellenssh -p 2222 user@host
. Dadurch wird der SSH-Dämon gezwungen, im Vordergrund zu bleiben und Debuginformationen zu jeder Verbindung anzuzeigen. Suchen Sie nach etwas wieWenn es nicht möglich ist, einen alternativen Port zu verwenden, können Sie den SSH-Daemon vorübergehend anhalten und ihn im Debug-Modus durch einen anderen ersetzen. Durch das Stoppen des SSH-Daemons werden vorhandene Verbindungen nicht beendet. Dies kann über ein Remote-Terminal erfolgen, ist jedoch etwas riskant. Wenn die Verbindung zu einem Zeitpunkt unterbrochen wird, an dem der Debug-Ersatz nicht ausgeführt wird, ist der Computer gesperrt bis Sie es neu starten können. Die erforderlichen Befehle:
(Abhängig von Ihrer Linux-Distribution kann die erste / letzte Zeile stattdessen
systemctl stop sshd.service
/ seinsystemctl start sshd.service
.)quelle
sshd -d
, aber es schlägt fehl, wenn ich tatsächlich renneservice sshd start
. Ich bin mir sicher, dass es einfach ist, aber ich bin kein Linux-Guru. Irgendwelche Gedanken?Ist Ihr Heimverzeichnis verschlüsselt? In diesem Fall müssen Sie für Ihre erste SSH-Sitzung ein Kennwort angeben. Die zweite SSH-Sitzung auf demselben Server arbeitet mit dem Authentifizierungsschlüssel. In diesem Fall können Sie Ihr
authorized_keys
Verzeichnis in ein unverschlüsseltes Verzeichnis verschieben und den Pfad in ändern~/.ssh/config
.Am Ende habe ich einen
/etc/ssh/username
Ordner mit dem Benutzernamen und den richtigen Berechtigungen erstellt und dieauthorized_keys
Datei dort abgelegt. Dann änderte die AuthorizedKeysFile-Direktive in/etc/ssh/config
:Dies ermöglicht es mehreren Benutzern, diesen SSH-Zugriff zu erhalten, ohne die Berechtigungen zu beeinträchtigen.
quelle
Nachdem Sie die Schlüssel auf den Remote-Computer kopiert und in den Computer eingefügt haben, müssen
authorized_keys
Sie Folgendes tun:quelle
ssh-add -L
Probieren Sie einfach die folgenden Befehle aus
ssh-keygen
Drücken Sie die Eingabetaste, bis Sie dazu aufgefordert werden
ssh-copy-id -i root@ip_address
(Es wird einmalig nach dem Passwort des Hostsystems gefragt)
ssh root@ip_address
Jetzt sollten Sie sich ohne Passwort anmelden können
quelle
Ich stand vor Herausforderungen, wenn das Basisverzeichnis auf der Fernbedienung nicht über die richtigen Berechtigungen verfügt. In meinem Fall hat der Benutzer das Home-Verzeichnis für einen lokalen Zugriff im Team auf 777 geändert . Das Gerät konnte keine Verbindung mehr mit SSH-Schlüsseln herstellen. Ich habe die Erlaubnis auf 744 geändert und es hat wieder funktioniert.
quelle
SELinux unter RedHat / CentOS 6 hat ein Problem mit der Pubkey-Authentifizierung , wahrscheinlich, wenn einige der Dateien erstellt werden. Selinux setzt seine ACLs nicht richtig.
So korrigieren Sie die SElinux-ACLs für den Root-Benutzer manuell:
quelle
ssh root@mymachine
Probleme auf ein CentOS6 zugreifenmymachine
, habe jedoch einen Benutzer mit niedrigeren Berechtigungen, den ich lieber verwenden würde, derssh regularUser@mymachine
mich jedoch weiterhin zur Eingabe eines Kennworts auffordert. Gedanken?Wir sind auf dasselbe Problem gestoßen und haben die Schritte in der Antwort befolgt. Bei uns hat es aber trotzdem nicht geklappt. Unser Problem war, dass die Anmeldung von einem Client aus funktionierte, von einem anderen jedoch nicht (das .ssh-Verzeichnis war NFS-gemountet und beide Clients verwendeten dieselben Schlüssel).
Also mussten wir noch einen Schritt weiter gehen. Wenn Sie den Befehl ssh im ausführlichen Modus ausführen, erhalten Sie viele Informationen.
Wir stellten fest, dass der Standardschlüssel (id_rsa) nicht akzeptiert wurde und stattdessen der SSH-Client einen Schlüssel anbot, der mit dem Hostnamen des Clients übereinstimmt:
Offensichtlich wird dies von keinem anderen Client funktionieren.
In unserem Fall bestand die Lösung darin, den Standard-RSA-Schlüssel auf den zu ändern, der user @ myclient enthielt. Wenn ein Schlüssel die Standardeinstellung ist, wird nicht nach dem Clientnamen gesucht.
Dann stießen wir nach dem Wechsel auf ein anderes Problem. Anscheinend werden die Schlüssel im lokalen ssh-Agenten zwischengespeichert und es wird der folgende Fehler im Debug-Protokoll angezeigt:
Dies wurde gelöst, indem die Schlüssel zum ssh-Agenten neu geladen wurden:
quelle
Es wäre eine SSH-Fehlkonfiguration am Serverende. Die serverseitige Datei sshd_config muss bearbeitet werden. Befindet sich in
/etc/ssh/sshd_config
. Ändern Sie in dieser Datei die Variablen"Ja" bis "Nein" für ChallengeResponseAuthentication, PasswordAuthentication, UsePAM
'no' bis 'yes' für PubkeyAuthentication
Basierend auf http://kaotickreation.com/2008/05/21/disable-ssh-password-authentication-for-added-security/
quelle
vi /etc/ssh/sshd_config
, fügen Sie Benutzer xxx zur Liste derservice sshd restart
zulässigen Benutzer hinzu. *** ACHTUNG: Wenn Sie den sshd-Dienst mit einer fehlerhaften sshd_config neu starten, werden Sie möglicherweise blockiert !? ***. Das hat funktioniert.Stellen Sie sicher, dass diese
AuthorizedKeysFile
auf die richtige Stelle zeigen, und verwenden Sie sie%u
als Platzhalter für den Benutzernamen:Es kann sein, dass Sie nur die Zeile auskommentieren müssen:
AuthorizedKeysFile .ssh / authorized_keys
Beachten Sie, dass Sie den ssh-Dienst neu laden müssen, damit die Änderungen wirksam werden:
quelle
Zwei Kommentare: Dadurch wird die Originaldatei überschrieben. Ich kopiere einfach den generierten öffentlichen Schlüssel und mache etwas wie:
Dadurch wird der Schlüssel, den Sie verwenden möchten, an die bereits vorhandene Liste der Schlüssel angehängt. Einige Systeme verwenden die Datei auch
authorized_keys2
, daher ist es eine gute Idee, eine feste Verknüpfung zwischenauthorized_keys
und zu erstellenauthorized_keys2
, nur für den Fall.quelle
Meine Lösung war, dass das Konto gesperrt war. Nachricht in / var / log / secure gefunden: Benutzer nicht erlaubt, da Konto gesperrt. Lösung: Geben Sie dem Benutzer ein neues Passwort.
quelle
/etc/shadow
für diesen Benutzer von!
in geändert habe*
. Danach ist die Passwort-Authentifizierung immer noch nicht möglich, der Benutzer ist jedoch nicht mehr gesperrt.Ich bin auf ein ähnliches Problem gestoßen und habe die Schritte im Debug-Modus ausgeführt.
Dies zeigte das folgende Ergebnis
Es war wirklich verwirrend
Es zeigte, dass das Stammverzeichnis Berechtigungen für alle hatte. Wir haben es geändert, damit andere keine Berechtigungen haben.
Die Schlüsselauthentifizierung funktioniert nun.
quelle
rsync -av ./root/ root@THE_HOST:/root
an, einige Dateien aus meinem lokalen Arbeitsverzeichnis hochzuladen. Dann tritt dieses Problem auf (tatsächlich bemerkte ich es zuerst nicht. Nachdem Cron-Jobs auf anderen Hosts am nächsten Morgen fehlschlugen, begann ich, den Grund zu suchen.) . Derrsync -av ./root/ root@THE_HOST:/root
Befehl hat den Eigentümer und die Berechtigung des/root
Verzeichnisses des Remote-Hosts geändert . Die Erlaubnis wurde behoben, das Problem wurde behoben.Failed publickey for root from 135.250.24.32 port 54553 ssh2
Ich erhalte dieselbe Meldung und dasselbe Problem, wenn ich vergessen habe, den Pubkey einem Host hinzuzufügenauthorized_keys
. Wenn ich diesen Kommentar wie in meinem FallIn der Datei / etc / selinux / config wurde SELINUX so geändert, dass es nicht mehr möglich ist, passwortloses SSH zu erzwingen.
Früher bin ich in der Lage, es auf eine Weise zu tun. Jetzt kann ich von beiden Seiten aus passwortloses ssh ausführen.
quelle
Eine Sache, die ich falsch hatte, war der Besitz in meinem Home-Verzeichnis auf dem Serversystem. Das Serversystem wurde auf default: default gesetzt, damit ich:
Und es hat funktioniert. Eine andere günstige Problemumgehung besteht darin, StrictModes zu deaktivieren: StirctModes-Nr. in sshd_config. Dies zeigt Ihnen zumindest, ob die Schlüsselaustausch- und Verbindungsprotokolle gut sind. Dann können Sie die schlechten Berechtigungen jagen.
quelle
Für mich war die Lösung gegenüber der von Wojtek Rzepala : Ich habe nicht bemerkt, dass ich immer noch benutze
authorized_keys2
, was veraltet ist . Mein SSH-Setup funktionierte irgendwann nicht mehr, vermutlich als der Server aktualisiert wurde. Umbenennung.ssh/authorized_keys2
als.ssh/authorized_keys
das Problem behoben.D'oh!
quelle
In der Vergangenheit bin ich auf einige Tutorials gestoßen, die beschreiben, wie man ein passwortloses ssh-Setup erreicht, aber einige sind leider falsch.
Fangen wir noch einmal von vorne an und überprüfen Sie jeden Schritt:
ssh-keygen -t rsa
Öffentlicher und privater Schlüssel (
id_rsa.pub
undid_rsa
) werden automatisch im~/.ssh/
Verzeichnis gespeichert .Die Einrichtung wird einfacher, wenn Sie eine leere Passphrase verwenden. Wenn Sie dazu nicht bereit sind, befolgen Sie trotzdem diese Anleitung, aber überprüfen Sie auch den nachstehenden Aufzählungspunkt.
ssh-copy-id user@server
öffentliche Schlüssel des Clients wird auf den Serverstandort kopiert
~/.ssh/authorized_keys
.ssh user@server
Wenn es nach den drei beschriebenen Schritten immer noch nicht funktioniert, versuchen wir Folgendes:
~/ssh
Ordnerberechtigungen auf dem Client- und Server- Computer./etc/ssh/sshd_config
in dem Server , um sicherzustellenRSAAuthentication
,PubkeyAuthentication
undUsePAM
Optionen nicht deaktiviert werden, können sie standardmäßig mit aktiviert werdenyes
.ssh-agent
undssh-add
kennwort weniger Verbindungen in Ihrer Sitzung zu erreichen./var/log/auth.log
auf dem Server das Problem zu finden , warum Key - Authentifizierung überhaupt übersprungen.quelle
Ich hatte genau das gleiche Problem mit PuTTY, das an eine Ubuntu 16.04 Maschine anschließt. Es war rätselhaft, weil das pscp-Programm von PuTTY mit demselben Schlüssel einwandfrei funktionierte (und mit demselben Schlüssel in PuTTY eine Verbindung zu einem anderen Host hergestellt wurde).
Dank des wertvollen Kommentars von @UtahJarhead habe ich meine Datei /var/log/auth.log überprüft und Folgendes festgestellt:
Es stellt sich heraus, dass neuere Versionen von OpenSSH standardmäßig keine DSA-Schlüssel akzeptieren. Nachdem ich von einem DSA zu einem RSA-Schlüssel gewechselt hatte, funktionierte es einwandfrei.
Ein anderer Ansatz: In dieser Frage wird erläutert, wie der SSH-Server für die Annahme von DSA-Schlüsseln konfiguriert wird: https://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication?lq = 1
quelle
Diese Schritte sollten Ihnen helfen. Ich benutze dies regelmäßig unter vielen 64-Bit-Ubuntu 10.04-Maschinen.
Sie können dies mit einigen Eingabeaufforderungen in ein Skript einfügen und es als aufrufen
quelle
ssh-copy-id
was die letzten beiden Schritte automatisch macht.mkdir
Sie dortchmod 700 .ssh
auch hinzufügen sollten und übrigens nicht so ausführlich sein müssen~/.ssh
, ist gerade.ssh
genug, da die Befehle sowieso imIch hatte ein ähnliches Problem mit ssh. In meinem Fall bestand das Problem darin, dass ich hadoop cloudera (von rpm auf centos 6) installiert und den Benutzer hdfs mit dem Basisverzeichnis erstellt habe
/var/lib/hadoop-hdfs
(nicht standard/home/hdfs
).Ich habe in / etc / passwd
/var/lib/hadoop-hdfs
zu gewechselt/home/hdfs
, das Home-Verzeichnis an einen neuen Speicherort verschoben und kann jetzt eine Verbindung mit der Authentifizierung mit öffentlichem Schlüssel herstellen.quelle
Ich habe das gleiche Problem hatte, und für mich war die Lösung gesetzt
UsePAM
zuno
. Sehen Sie, auch wenn aufPasswordAuthentication
gesetztno
, werden Sie immer noch bekommenkeyboard-interactive
, und in meinem Fall hat mein lokales ssh-Programm aus irgendeinem Grund diese Voreinstellung beibehalten.Zusätzlicher Hintergrund für alle, die in der gleichen Situation sind: Ich verbinde mich von einem Host mit Dropbear zu einem mit OpenSSH. Mit
PasswordAuthentication
undUsePAM
beide setzenno
auf dem entfernten Rechner, werde ich die folgende Meldung erhalten , wenn ich eingebenssh user@server
:Wenn Sie die Identitätsdatei bereitstellen
-i
, funktioniert alles wie erwartet.Möglicherweise gibt es hier etwas mehr Informationen.
quelle
Nachdem ich die Berechtigungen überprüft und verschiedene andere hier aufgelistete Lösungen ausprobiert hatte, entfernte ich schließlich das ssh-Verzeichnis auf dem Server und richtete meinen öffentlichen Schlüssel erneut ein.
Serverbefehle:
Lokale Befehle:
quelle
Auf dem Server:
Es war
directory permission issue
. Es war 777 am Server, alsoI changed it back to 700
. Dies istfixed
mein Problem,ssh password less login failure
auch nach dem Kopieren$USER/.ssh/id_rsa.pub
auf den Server$USER/.ssh/authorized_keys
.quelle
Eine weitere Option ist eine Variante von @Jagadishs Antwort : an
strace
den ssh-Daemon.Es hat den entscheidenden Vorteil, dass wir sshd nicht stoppen müssen, was zu einer vollständigen Sperrung führen kann, wenn etwas schief geht.
Zuerst finden wir die PID des Hauptprozesses sshd. Hier können wir es sehen, indem wir a ausführen
pstree -pa|less
.Nachdem wir wissen, dass die pid 633 ist, können wir
strace
sie nach ihren Kindern:Das Ergebnis wird sein, dass alles, was dieser sshd und seine untergeordneten Prozesse getan haben, in die
sux
im lokalen Verzeichnis angegebene Datei verschoben wird .Dann reproduzieren Sie das Problem.
Es wird eine riesige Liste von Kernel-Anrufprotokollen geben, die für uns größtenteils unverständlich / irrelevant sind, aber nicht überall. In meinem Fall war das Wichtigste:
Es war beabsichtigt, dass das sshd versuchte, die Nachricht zu protokollieren. Benutzer cica nicht erlaubt, da das Konto gesperrt ist - es konnte nur nicht, weil die Protokollierung nicht ausführlich genug ist. Aber wir wissen bereits, dass der Pubkey abgelehnt wurde, weil das Konto gesperrt war.
Es ist noch keine Lösung - jetzt müssen wir googeln, was im Fall von sshd ein "gesperrtes Konto" bedeutet. Es wird höchstwahrscheinlich einige trivial
/etc/passwd
,/etc/shadow
Zauberei, aber das Wichtigste ist , getan - das Problem ist nicht ein mysteriöser ist, sondern ein leicht debug / googlable ein.quelle
In meinem Fall hatte ich alle Rechte und selbst wenn ich ssh mit -vvv flag laufen ließ, konnte ich nicht herausfinden, was das Problem war.
Also habe ich ein neues Zertifikat auf dem Remote-Host generiert
und kopierte generierte Schlüssel auf den lokalen Computer und fügte einen neuen öffentlichen Schlüssel zu ~ / .ssh / authorized_keys auf dem Remote-Host hinzu
Die Verwendung der generierten Schlüssel von der Remote-Host-Computer-Verbindung funktioniert jetzt. Wenn andere Lösungen versagen, ist dies eine andere Sache, die Sie versuchen sollten.
quelle
Mein Szenario war, dass ich einen NAS-Server besitze, auf dem ich
backupbot
nach der Erstellung meines primären Kontos einen Benutzer erstellt habe, der sich anmelden konnte, um denbackupbot
Benutzer zunächst zu erstellen . Nachdem Sie mitsudo vim /etc/ssh/sshd_config
dembackupbot
Benutzer herumgespielt und ihn erstellt haben ,vim
können Sie zumindest unter Ubuntu 16.04 und basierend auf Ihrer~/.vimrc
Konfiguration eine Auslagerungsdatei erstellen, die von der Bearbeitung Ihrer vim-Sitzung von übrig geblieben ist/etc/ssh/sshd_config
.Überprüfen Sie, ob:
/etc/ssh/.sshd_config.swp
vorhanden ist und ob es entfernt wird, und starten Sie densshd
Dämon neu:Dies löste mein Problem auf magische Weise. Ich hatte zuvor alle meine Berechtigungen und sogar die RSA-Fingerabdrücke der öffentlichen und privaten Schlüssel überprüft. Das ist seltsam und wahrscheinlich ein Fehler in
sshd
dieser Version:quelle