
Ich habe einen VPS mit CentOS 6. Mir sind viele Anmeldeversuche über SSH aufgefallen, deshalb möchte ich ihn mit einer schlüsselbasierten Authentifizierung sperren. Hier ist, was ich bisher getan habe...
Folgendes habe ich auf meinem Client-Rechner (OSX) ausgeführt:
ssh-keygen -t rsa
Habe dies mit den Standardeinstellungen gemacht (keine Passphrase, Standardnamen usw.)
Legen Sie die folgenden Berechtigungen auf meinem Client fest
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
habe meinen öffentlichen Schlüssel mit dem folgenden Befehl (falscher Name/falsche IP) in das Stammverzeichnis meines Benutzerordners auf meinem VPS kopiert
scp id_rsa.pub [email protected]:/home/fakeuser/id_rsa.pub
Hier fiel mir auf, dass ich KEINE authorized_keys-Datei in meiner .ssh hatte. Also habe ich touch verwendet, um sie zu erstellen. Dann habe ich CAT verwendet, um den Inhalt der .pub in die authorized_keys-Datei zu kopieren
cat id_rsa.pub >> ~/.ssh/authorized_keys
und legen Sie die entsprechenden Berechtigungen für .ssh und authorized_keys fest
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
In /etc/ssh/sshd_config habe ich Folgendes auskommentiert
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Ich habe dann sshd neu gestartet
service sshd restart
Soweit ich gelesen habe, ist das alles, was ich tun muss, um die Authentifizierung mit öffentlichem Schlüssel zu aktivieren. Wenn ich jedoch versuche, eine SSH-Verbindung herzustellen, ohne -i privatekey anzugeben, kann ich mich von allen Geräten aus anmelden.
Antwort1
Wenn sich ein Client-Schlüssel am Standardspeicherort befindet, ~/.ssh/id_$alg
wird er automatisch verwendet, es sei denn, Sie verwenden -o IdentitiesOnly=yes
(oder den entsprechenden Eintrag in der Konfigurationsdatei), um ihn zu deaktivieren. Wenn Sie sich von einem Client aus verbinden können, der keine Kopie des privaten Schlüssels hatUndohne Angabe eines Passworts, dann ist die Authentifizierung auf Ihrem Server nicht korrekt eingestellt. Wenn SienurPrivateKey->PublicKey-Authentifizierung, konfigurieren PasswordAuthentication no
.
PS: anything >>file
(und anything >file
außerdem) erstellt die Datei, wenn sie nicht existiert, Sie brauchen touch
sie nicht. Und das Standard-Remote-Verzeichnis scp
ist Ihr Home-Verzeichnis, also müssen Sie das normalerweise nicht angeben.
Auch:
RSAAuthentication
ist für SSHv1, das vor Jahrzehnten kaputt gegangen ist und nie verwendet werden sollte und seit langer Zeit in allen OpenSSH-Versionen standardmäßig deaktiviert ist und ab 7.4 vollständig von der Serverseite entfernt wurde, obwohl ich annehme, dass CentOS 6 wahrscheinlich nicht über eine so aktuelle Version verfügt.
PubkeyAuthentication yes
und AuthorizedKeysFile .ssh/authorized_keys
(plus authorized_keys2
, das ein Relikt ist und nicht mehr verwendet wird) sind die Standardeinstellungen, Sie müssen sie also nicht auskommentieren.
Antwort2
Sie müssen die Kennwortauthentifizierung auf dem Server explizit deaktivieren, wenn Sie nur öffentliche/private Schlüssel zulassen möchten. /etc/ssh/sshd_config
Ändern oder ergänzen Sie in Ihrer Einstellung die folgende Einstellung:
PasswordAuthentication no
Ich möchte auch alle anderen Authentifizierungsarten, die ich nicht verwende, wie Kerberos und GSSAPI, explizit deaktivieren.