Durch Hinzufügen eines öffentlichen Schlüssels zu ~ / .ssh / authorized_keys werde ich nicht automatisch angemeldet

446

Ich habe den öffentlichen SSH-Schlüssel zur Datei authorized_keys hinzugefügt . ssh localhostsollte mich anmelden, ohne nach dem Passwort zu fragen.

Ich habe das getan und versucht ssh localhostzu 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?

user482594
quelle
5
Dies ist hier zwar nicht der Fall, aber wenn Sie von Google kommen und ein verschlüsseltes Home-Verzeichnis verwenden, kann sshd nicht darauf zugreifen und daher Ihre Datei "authorized_keys" nicht lesen. Hier ist eine Lösung: bugs.launchpad.net/ubuntu/+source/openssh/+bug/362427/comments/…
Daniel Schaffer

Antworten:

1097

Sie müssen die Berechtigungen der authorized_keysDatei und der Ordner / übergeordneten Ordner überprüfen, in denen sie sich befindet.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

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.

chmod go-w ~
Teddy
quelle
6
Nun, etwas in dem oben genannten hat funktioniert, obwohl "chmod -R go-wrx foobar" nicht ziemlich dramatisch ist? Warum rekursiv?
Joachim
9
Für den zweiten Teil ist es nicht notwendig, es rekursiv zu machen, nur das zu tun chmod go-wrx foobarist 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.
StingeyB
24
Wie in den OpenSSH-FAQ erwähnt, muss das Home- und .ssh-Verzeichnis des Benutzers nur die Schreibberechtigung für die Gruppe / andere entfernen (dies chmod go-w $HOME $HOME/.sshist 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.14
davidjb
3
Warum sollte es bei mir nicht funktionieren, bis ich es tat chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys? 600 hat nicht funktioniert, wo 644 ...
Ficuscr
3
Ich musste auch, sudo chown -R {$USER}:{$USER} ~/.ssh/weil ich die authorized_keysDatei als root geschrieben hatte.
Zane Hooper
155

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:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh
Cole Stanfield
quelle
7
Dies restoreconist 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.)
ospalh
Ein weiterer glücklicher Camper hier. Dies war mein Problem in RHEL 6.5
Antonio Ortells
2
9/10 Mal ist ein "Warum funktioniert das nicht, es funktioniert immer" -Problem ein Selinux-Problem.
Andrew White
Das Problem für mich auf 1and1 (1und1) Server
behoben
104

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

Betrachten Sie Cygwin als Linux-Emulation und installieren und führen Sie openssh aus

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 Zielcomputerssh-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_namefunktioniert 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

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(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

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

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.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

===============================================

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)

Bortunac
quelle
5
Beachten Sie, dass "nur 4 Sicherheit" nicht nur der Sicherheit dient! SSH ignoriert die Datei, wenn sie keine einschränkenden Berechtigungen hat.
Navin
Die Sicherstellung des Eigentums wäre eine großartige Ergänzung zu dieser Liste
steviejay
1
Ich hatte keine Ahnung ssh-copy-id! Dieser Schritt allein wäre eine gute Antwort.
James Marble
1
chmod 755 ~ / .ssh statt 700, die ich anderswo sehe, schien es zu tun
Jim W sagt, Monica
36

Stellen Sie außerdem sicher, dass Ihr Home-Verzeichnis nicht von anderen beschreibbar ist

chmod g-w,o-w /home/USERNAME

Die Antwort wird von hier gestohlen

Stephan Hoyer
quelle
4
Das chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~hat für mich funktioniert. Vielen Dank.
Gbraad
warum nicht einfach chmod og-w /home/USERNAMEstattdessen verwenden?
Paramvir Singh Karwal
12

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.

Alexander Taylor
quelle
2
Genau das ist mir passiert! Die beiden Terminals sind gleich breit, daher ist es schwierig, dies herauszufinden, bis ich die Zeilennummern aktiviert habe, um zwei Zeilen in der Datei authorized_keys zu sehen.
Shawn
1
Diese. Ich habe gerade eine Stunde damit verschwendet. Und es ist nicht das erste Mal. In der Antwort von @ bortunac wird das Tool ssh-copy-id erwähnt, das ich in Zukunft verwenden werde, um dies zu vermeiden.
xdhmoore
7

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

Nim
quelle
Sie können sehen, wie SELinux eingreift /var/log/audit/audit.log. restorecon -R -v /root/.sshhabe meinen speziellen Fall behoben.
Dave Goodell
7

Benutzer ist Ihr Benutzername

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
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
wcc526
quelle
Besser für root: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!
Odysseus
7

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.

fche
quelle
5

Schreibbefehl:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Stellen Sie anschließend sicher, dass Ihr Verzeichnis so lautet:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub
Exsonic
quelle
1
Wie unterscheidet sich Ihre Antwort von der akzeptierten? Sie haben es 3 Jahre später mit Ihrem Befehl Strg + C Strg-V geschrieben?
Stinger
5

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:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 
Ulliroyal
quelle
chown: ungültiger Benutzer: '/home/lsa/.ssh/'
Stepan
3

Versuchen Sie "ssh-add", was für mich funktioniert hat.

h99
quelle
3

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.

Wenn Sie nicht mehr mit DSA-Schlüsseln arbeiten können, können Sie die Unterstützung lokal wieder aktivieren, indem Sie Ihre sshd_configund ~/.ssh/configDateien mit folgenden Zeilen aktualisieren :PubkeyAcceptedKeyTypes=+ssh-dss

user2683246
quelle
3

In meinem Fall musste ich meine authorized_keysDatei einfügen .openssh.

Dieser Speicherort wird /etc/ssh/sshd_configunter der Option angegeben AuthorizedKeysFile %h/.ssh/authorized_keys.

Sean Bannister
quelle
Es gibt eine ganze Reihe von Problemen, die auf dem Server auftreten können (wenn versucht wird, eine Verbindung von einem Client aus herzustellen), die ohne Zugriff auf den Server nicht debuggt werden können. Dies dient dazu, Informationen vor böswilligen Clients zu verbergen, erschwert dies jedoch debuggen.
Qneill
2

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.

George
quelle
2

Das löst mein Problem

ssh-agent bash

ssh-add

julianisch
quelle
Erklären Sie bitte, was das bewirkt.
Lyuboslav Kanev
Der ssh-Agent speichert Ihre ssh-Schlüssel. Der Befehl bash startet eine neue Instanz seiner Shell. und ssh-add entsperrt Ihre Schlüssel und lädt sie
Julian
2

Ein weiteres Problem, auf das Sie achten müssen. Wenn Ihre generierte Datei nicht Standard ist id_rsa und id_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:

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub
Kunthar
quelle
2
Die IdentityFile sollte der private Schlüssel sein
Ken H
@ KenH ja sicher. Tippfehler ist es. das tut mir leid.
Kunthar
1

Ich habe sudo chmod 700 ~/.sshund chmod 600 ~/.ssh/authorized_keysund chmod go-w $HOME $HOME/.sshvon 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 Dank

GJSmith3rd
quelle
1

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 ~/.sshund ~/.ssh/*. In meinem Fall sind sie /home/xxx.

Sie können die Protokollstufe von sshd ändern, indem Sie sie ändern /etc/ssh/sshd_config(suchen LogLevel, einstellen DEBUG) und dann die Ausgabe einchecken, um /var/log/auth.logzu sehen, was genau passiert ist.

Joey
quelle
3
Dies sieht im Wesentlichen identisch mit der akzeptierten Antwort aus und hätte wahrscheinlich ein Kommentar dazu sein sollen, keine Antwort. Mit etwas mehr Wiederholungen können Sie Kommentare posten . Verwenden Sie bis dahin keine Antworten als Problemumgehung.
Nathan Tuggy
Entschuldigung, ich dachte, es ist der Weg, um alle Arten dieser Frage zu lösen. Jetzt weiß ich, wie es jetzt geht, danke.
Joey
1

Mein Problem war eine modifizierte AuthorizedKeysFile, als die Automatisierung zum Auffüllen von / etc / ssh / authorized_keys noch nicht ausgeführt wurde.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u
Kennzeichen
quelle
1

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.

Edward van Kuik
quelle
1

Stellen Sie sicher, dass Sie den gesamten öffentlichen Schlüssel in kopiert haben authorized_keys. Das ssh rsaPräfix ist erforderlich, damit der Schlüssel funktioniert.

Willem
quelle
2
verwendet ssh-copy-id
vishnu
1

Sie müssen die Eigenschaften der Dateien überprüfen. um die erforderliche Eigenschaftsnutzung zuzuweisen:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub
Manna
quelle
1

Suchen Sie /var/log/auth.logauf dem Server nach sshdAuthentifizierungsfehlern.

Wenn alles andere fehlschlägt, führen Sie den sshdServer im Debug-Modus aus:

sudo /usr/sbin/sshd -ddd -p 2200

Stellen Sie dann vom Client aus eine Verbindung her:

ssh user@host -p 2200

In meinem Fall habe ich den Fehlerbereich am Ende gefunden:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

Mit diesen Informationen wurde mir klar, dass meine sshd_configAnmeldungen auf Mitglieder der sshGruppe beschränkt waren. Der folgende Befehl hat diesen Berechtigungsfehler behoben:

sudo usermod -a -G ssh NEW_USER
cmcginty
quelle
0

Stellen Sie in diesem Zusammenhang sicher, dass Sie sshd config haben -;

PermitRootLogin without-password

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 -;

PermitRootLogin no
Edd Haltung
quelle
0

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.

pppk520
quelle
0

Ich habe das Home-Verzeichnis an einem nicht standardmäßigen Speicherort und in sshdProtokollen habe ich diese Zeile:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

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 einem sshdNeustart

alexandrul
quelle
0

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 /rootVerzeichnis selbst (nicht zB /root/.ssh) die falschen Berechtigungen hatte. Ich brauchte:

chown root.root /root
chmod 700 /root

Natürlich sollten diese Berechtigungen (vielleicht chmod 770) unabhängig davon ungefähr so ​​sein. Es ist jedoch ausdrücklich verhindert sshdaus arbeiten, obwohl /root/.sshund /root/.ssh/authorized_keysbeide richtigen Berechtigungen und Besitzer hatten.

Jason Cohen
quelle
0

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.

Bevor
quelle