Ich habe den öffentlichen SSH-Schlüssel zur Datei authorized_keys hinzugefügt . ssh localhost
sollte mich anmelden, ohne nach dem Passwort zu fragen.
Ich habe das getan und versucht ssh localhost
zu tippen, aber es fordert mich trotzdem auf, das Passwort einzugeben. Gibt es eine andere Einstellung, die ich durchlaufen muss, damit es funktioniert?
Ich habe die Anweisungen zum Ändern von Berechtigungen befolgt:
Unten ist das Ergebnis, wenn ich es tue ssh -v localhost
.
debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
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 public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Dann fragt es nach einer Passphase nach dem obigen Protokoll. Warum meldet es mich nicht ohne Passwort an?
ssh
public-key
authorized-keys
user482594
quelle
quelle
Antworten:
Sie müssen die Berechtigungen der
authorized_keys
Datei und der Ordner / übergeordneten Ordner überprüfen, in denen sie sich befindet.Weitere Informationen finden Sie auf dieser Seite .
Möglicherweise müssen Sie auch die Berechtigungen Ihres Home-Verzeichnisses ändern / überprüfen, um den Schreibzugriff für die Gruppe und andere zu entfernen.
quelle
chmod go-wrx foobar
ist genug. Eine rekursive Ausführung kann einige Anwendungen ernsthaft beeinträchtigen, wenn Sie Gruppen- oder anderen Zugriff auf Dateien haben, insbesondere wenn es sich um ein Webverzeichnis handelt.chmod go-w $HOME $HOME/.ssh
ist auch der Trick). Daher können Berechtigungen für beide Verzeichnisse so offen wie 755 sein, wenn Sie dazu neigen. Die einfachsten / am wenigsten invasiven Befehle finden Sie in den FAQ: openssh.org/faq.html#3.14chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys
? 600 hat nicht funktioniert, wo 644 ...sudo chown -R {$USER}:{$USER} ~/.ssh/
weil ich dieauthorized_keys
Datei als root geschrieben hatte.SELinux kann auch dazu führen, dass autorisierte_Tasten nicht funktionieren. Speziell für root in CentOS 6 und 7. Sie müssen es jedoch nicht deaktivieren. Sobald Sie überprüft haben, dass Ihre Berechtigungen korrekt sind, können Sie dies folgendermaßen beheben:
quelle
restorecon
ist das, was Sie benötigen, nachdem Sie die Dateien von Hand kopiert haben, z. B. auf eine neue Festplatte. (Sie sollten es wahrscheinlich auf allen Dateien in diesem Fall ausführen. Könnte andere seltsame Probleme beheben.)Das Setzen von ssh autorisierten Schlüsseln scheint einfach zu sein, verbirgt jedoch einige Fallen, die ich herausfinden möchte
- SERVER -
In / etc / ssh / sshd_config wird festgelegt
passwordAuthentication yes
, dass der Server die Kennwortauthentifizierung vorübergehend akzeptiert-- KLIENT --
1. Generieren Sie private und öffentliche Schlüssel (clientseitig)
# ssh-keygen
Wenn Sie hier nur die EINGABETASTE drücken, erhalten Sie die DEFAULT 2-Dateien " id_rsa " und " id_rsa.pub " in ~ / .ssh /. Wenn Sie jedoch einen Namen für den Schlüssel angeben, werden die generierten Dateien in Ihrem pwd gespeichert
2. Platzieren Sie die Datei your_key.pub auf dem Zielcomputer
ssh-copy-id user_name@host_name
Wenn Sie keinen Standardschlüssel erstellt haben, ist dies der erste Schritt, der schief geht. Sie sollten ihn verwenden
ssh-copy-id -i path/to/key_name.pub user_name@host_name
3. Die Protokollierung
ssh user_name@host_name
funktioniert nur für die Standard-ID_RSA. Hier ist also die zweite Falle, die Sie benötigenssh -i path/to/key_name user@host
(Verwenden Sie die Option ssh -v ..., um zu sehen, was passiert.)
Wenn der Server immer noch nach dem Passwort fragt, haben Sie etw angegeben. eingeben Passwort: wenn Sie haben Schlüssel erstellt (also ist es normal)
Wenn ssh nicht lauscht, muss Standardport 22 verwendet werden
ssh -p port_nr
- SERVER -----
4. Ändern Sie / etc / ssh / sshd_config, um zu haben
(Uncoment wenn Fall)
Dies weist ssh an, autorisierte_Tasten zu akzeptieren und im Benutzer-Ausgangsverzeichnis nach Schlüsselnamen zu suchen, die in der Datei .ssh / autorisierte_Tasten geschrieben sind
5 Festlegen von Berechtigungen auf dem Zielcomputer
Schalten Sie auch die Passauthentifizierung aus
passwordAuthentication no
um das Tor zu allen Versuchen von ssh root / admin /....@ your_domain zu schließen
6 Stellen Sie sicher, dass das Eigentum und das Gruppeneigentum an allen Nicht-Root-Home-Verzeichnissen angemessen sind.
===============================================
7. Betrachten Sie die hervorragende http://www.fail2ban.org
8. extra ssh TUNNEL für den Zugriff auf einen MySQL- Server (bind = 127.0.0.1)
quelle
ssh-copy-id
! Dieser Schritt allein wäre eine gute Antwort.Stellen Sie außerdem sicher, dass Ihr Home-Verzeichnis nicht von anderen beschreibbar ist
Die Antwort wird von hier gestohlen
quelle
chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~
hat für mich funktioniert. Vielen Dank.chmod og-w /home/USERNAME
stattdessen verwenden?Die Verzweifelten können auch sicherstellen, dass sie keine zusätzlichen Zeilenumbrüche in der Datei "authorized_keys" haben, da sie den Text "id_rsa.pub" aus einem verwirrten Terminal kopieren.
quelle
Beachten Sie, dass SELinux diesen Fehler auch auslösen kann, selbst wenn alle Berechtigungen in Ordnung zu sein scheinen. Das Deaktivieren hat den Trick für mich getan (übliche Haftungsausschlüsse zum Deaktivieren einfügen).
quelle
/var/log/audit/audit.log
.restorecon -R -v /root/.ssh
habe meinen speziellen Fall behoben.Benutzer ist Ihr Benutzername
quelle
mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Das Auflisten eines öffentlichen Schlüssels in .ssh / authorized_keys ist erforderlich, reicht jedoch nicht aus, damit sshd (Server) ihn akzeptiert. Wenn Ihr privater Schlüssel passphrasengeschützt ist, müssen Sie ssh (client) jedes Mal die Passphrase geben. Oder Sie können ssh-agent oder ein GNOME-Äquivalent verwenden.
Ihre aktualisierte Ablaufverfolgung stimmt mit einem passphrasengeschützten privaten Schlüssel überein. Siehe ssh-agent oder use
ssh-keygen -p
.quelle
Schreibbefehl:
Stellen Sie anschließend sicher, dass Ihr Verzeichnis so lautet:
quelle
Die Sache, die den Trick für mich getan hat, war schließlich sicherzustellen, dass der Eigentümer / die Gruppe nicht root, sondern user war:
quelle
Versuchen Sie "ssh-add", was für mich funktioniert hat.
quelle
Ein weiterer Tipp zum Erinnern. Seit Version 7.0 deaktiviert OpenSSH DSS / DSA-SSH-Schlüssel aufgrund ihrer Schwachstelle standardmäßig. Wenn Sie also OpenSSH v7.0 + haben, stellen Sie sicher, dass Ihr Schlüssel nicht vorhanden ist
ssh-dss
.quelle
In meinem Fall musste ich meine
authorized_keys
Datei einfügen.openssh
.Dieser Speicherort wird
/etc/ssh/sshd_config
unter der Option angegebenAuthorizedKeysFile %h/.ssh/authorized_keys
.quelle
Stellen Sie sicher, dass für den Zielbenutzer ein Kennwort festgelegt ist. Führen Sie aus
passwd username
, um einen festzulegen. Dies war für mich auch dann erforderlich, wenn die SSH-Anmeldung für das Passwort deaktiviert war.quelle
Das löst mein Problem
quelle
Ein weiteres Problem, auf das Sie achten müssen. Wenn Ihre generierte Datei nicht Standard ist
id_rsa
undid_rsa.pub
Sie müssen eine .ssh / config-Datei erstellen und manuell definieren, welche ID-Datei Sie für die Verbindung verwenden möchten.
Beispiel ist hier:
quelle
Ich habe
sudo chmod 700 ~/.ssh
undchmod 600 ~/.ssh/authorized_keys
undchmod go-w $HOME $HOME/.ssh
von oben ausgegeben und es hat mein Problem auf einer CentOS7-Box behoben, bei der ich die Berechtigungen durcheinander gebracht hatte, während ich versucht habe, Samba-Freigaben zum Laufen zu bringen. Vielen Dankquelle
Es scheint ein Berechtigungsproblem zu sein. Normalerweise passiert es, wenn die Berechtigung einer Datei / eines Verzeichnisses nicht korrekt eingerichtet ist. In den meisten Fällen sind sie
~/.ssh
und~/.ssh/*
. In meinem Fall sind sie/home/xxx
.Sie können die Protokollstufe von sshd ändern, indem Sie sie ändern
/etc/ssh/sshd_config
(suchenLogLevel
, einstellenDEBUG
) und dann die Ausgabe einchecken, um/var/log/auth.log
zu sehen, was genau passiert ist.quelle
Mein Problem war eine modifizierte AuthorizedKeysFile, als die Automatisierung zum Auffüllen von / etc / ssh / authorized_keys noch nicht ausgeführt wurde.
quelle
Schauen Sie sich einfach /var/log/auth.log auf dem Server an . Das Festlegen einer zusätzlichen Ausführlichkeit mit -vv auf der Clientseite hilft nicht, da der Server einem möglichen Angreifer wahrscheinlich nicht zu viele Informationen bietet.
quelle
Stellen Sie sicher, dass Sie den gesamten öffentlichen Schlüssel in kopiert haben
authorized_keys
. Dasssh rsa
Präfix ist erforderlich, damit der Schlüssel funktioniert.quelle
Sie müssen die Eigenschaften der Dateien überprüfen. um die erforderliche Eigenschaftsnutzung zuzuweisen:
quelle
Suchen Sie
/var/log/auth.log
auf dem Server nachsshd
Authentifizierungsfehlern.Wenn alles andere fehlschlägt, führen Sie den
sshd
Server im Debug-Modus aus:Stellen Sie dann vom Client aus eine Verbindung her:
In meinem Fall habe ich den Fehlerbereich am Ende gefunden:
Mit diesen Informationen wurde mir klar, dass meine
sshd_config
Anmeldungen auf Mitglieder derssh
Gruppe beschränkt waren. Der folgende Befehl hat diesen Berechtigungsfehler behoben:quelle
Stellen Sie in diesem Zusammenhang sicher, dass Sie sshd config haben -;
wie oben eingestellt, dann sshd neu starten (/etc/init.d/sshd restart)
Melden Sie sich ab und versuchen Sie es erneut!
Standard ist meiner Meinung nach -;
quelle
In meinem Fall liegt es daran, dass die Benutzergruppe nicht in AllowGroups der Konfigurationsdatei / etc / ssh / sshd_config festgelegt ist. Nach dem Hinzufügen funktioniert alles einwandfrei.
quelle
Ich habe das Home-Verzeichnis an einem nicht standardmäßigen Speicherort und in
sshd
Protokollen habe ich diese Zeile:auch wenn alle Berechtigungen in Ordnung waren (siehe die anderen Antworten).
Ich habe hier eine Lösung gefunden: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191
In meinem speziellen Fall:
fügte eine neue Zeile hinzu in
/etc/selinux/targeted/contexts/files/file_contexts.homedirs
:Dies ist die ursprüngliche Zeile für reguläre Home-Verzeichnisse:
/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0
Das ist meine neue Linie:
/data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0
gefolgt von einem
restorecon -r /data/
und einemsshd
Neustartquelle
Ich hatte dieses Problem und keines der anderen Antworten gelöst es, obwohl natürlich die anderen Antworten sind richtig.
In meinem Fall stellte sich heraus, dass das
/root
Verzeichnis selbst (nicht zB/root/.ssh
) die falschen Berechtigungen hatte. Ich brauchte:Natürlich sollten diese Berechtigungen (vielleicht
chmod 770
) unabhängig davon ungefähr so sein. Es ist jedoch ausdrücklich verhindertsshd
aus arbeiten, obwohl/root/.ssh
und/root/.ssh/authorized_keys
beide richtigen Berechtigungen und Besitzer hatten.quelle
Ich hatte dieses Problem, als ich die Gruppe des angemeldeten Benutzers einem anderen Benutzer hinzufügte. Angenommen, es gibt einen SSH-Login-Benutzer namens userA und einen Nicht-SSH-Login-Benutzer userB. userA hat auch die Gruppe userA. Ich habe userB so geändert, dass auch die Gruppe userA vorhanden ist. Dies führte zu dem beschriebenen Verhalten, so dass sich BenutzerA nicht ohne Aufforderung anmelden konnte. Nachdem ich die Gruppe userA von userB entfernt hatte, funktionierte die Anmeldung ohne Eingabeaufforderung erneut.
quelle