Kann nicht einmal mit öffentlichem Schlüssel zu authorized_keys ssh


14

Ich habe ein Digital Ocean-Tröpfchen, auf das ich mir ssh-Zugriff verschaffen möchte. Ich bin nicht sicher, was vorher damit gemacht wurde. Ich habe versucht, meinen öffentlichen Schlüssel über die Benutzeroberfläche von Digital Ocean hinzuzufügen. Das hat nicht funktioniert, ich bekam immer permission denied (publickey).

Ich habe über die Digital Ocean-Konsole auf den Server zugegriffen und meinen öffentlichen Schlüssel manuell hinzugefügt /root/.ssh/authorized_keys. Ich habe dann versucht, mit ssh ssh root@x.x.x.x. Das hat nicht funktioniert (Erlaubnis verweigert).

Also habe ich versucht, einen neuen Benutzer hinzuzufügen, das /home/me/.sshVerzeichnis mit den Berechtigungen 700für das .sshVerzeichnis selbst und 600für die authorized_keysDatei erstellt. Dann habe ich es versucht ssh me@x.x.x.x. Das hat auch nicht funktioniert.

Ein Neustart des ssh-Daemons ändert auch nichts.

Was vermisse ich?

Bearbeiten:

Hier ist eine ausführliche ssh-Ausgabe.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Bearbeiten 2:

LogLevel DEBUG3 Ausgabe:

Bildbeschreibung hier eingeben


Veröffentlichen Sie das ausführliche Protokoll der Verbindung, Ihren Inhalt von sshd_config und mögliche Fehler im Zusammenhang mit ssh im Serverprotokoll.
Jakuje

@ Jakuje Ich habe die Ausgabe hinzugefügt ... Ich habe Ihren Kommentar vorher nicht bemerkt.
Jeff

Der Schlüssel wird abgelehnt. Überprüfen Sie das Serverprotokoll auf mögliche Probleme (möglicherweise mit LogLevel DEBUG3in sshd_config). Ich vermute, dass dies Berechtigungsprobleme sind, aber dafür kann es mehrere Gründe geben.
Jakuje

Es heißt[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

Welche Berechtigungen hat die Datei authorized_keys? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Für das ausführliche Protokoll vom Server ändern Sie die oben genannte Datei, starten Sie den ssh-Dienst neu, stellen Sie erneut eine Verbindung her und auth.log
senden Sie

Antworten:


19

Client-Konfiguration

Installieren ~/.ssh/config

Das Einrichten von Host-Einträgen für sshist sehr einfach und erspart Ihnen viel Ärger. Hier ist ein Beispiel:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

In diesem Beispiel richten wir digitaloceanboxund eingithub und github.comso , dass wir die folgenden Befehle tun können:

  1. ssh github
  2. ssh digitaloceanbox

Wenn wir uns als ein anderer Benutzer als der in der Konfigurationsdatei angegebene anmelden möchten, setzen wir einfach user@am Anfang:

  • ssh user@digitaloceanbox

Generieren von sshSchlüsseln

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

Beachten Sie, dass ich den vollständigen Pfad des privaten Schlüssels angegeben habe, den ich generieren möchte, wenn ich dazu aufgefordert werde ssh-keygen. Ich habe auch comment ( -C) definiert, mit dem ich Schlüssel auf Remote-Rechnern leicht identifizieren kann.

Dadurch werden zwei Dateien erstellt:

  1. .ssh/digitalocean-rsa
    • PRIVATER SCHLÜSSEL . Teile das niemals .
  2. .ssh/digitalocean-rsa.pub
    • Öffentlicher Schlüssel. Dies ist, was Sie auf dem Server speichern, um sich zu authentifizieren.

Wenn Sie Ihren sshSchlüssel bereitstellen , vergewissern Sie sich, dass es der ist.pub Version handelt !! Wenn Sie zu Ihrem hinzufügen~/.ssh/config darauf, den richtigen privaten Schlüssel hinzuzufügen, der dem öffentlichen Schlüssel entspricht, den Sie dem System hinzugefügt haben.


Serverkonfiguration

Bei den meisten Installationen ist die Authentifizierung mit öffentlichem Schlüssel aktiviert. Wenn Sie anfangen, alles gut oder schlecht zu machen, könnten Sie jedoch auf ein paar Probleme stoßen. An der Stelle, an der sich das OP in ihrem Problem befindet, empfehle ich, das OP zu löschen/root/.ssh/ Verzeichnis , um von zu beginnen.

Es wird nicht empfohlen, sshauf den Root-Benutzer des Remote-Systems zuzugreifen. Es wird empfohlen, dass Siessh bei einem anderen Benutzer anmelden und dann mit Ihrem Kennwort ( sudo su -) zu root eskalieren .

Fügen Sie dem Host Schlüssel hinzu, indem Sie verwenden ssh-copy-id

Unabhängig davon, ob Sie einen anderen Benutzer erstellen und sshals dieser Benutzer oder als Rootbenutzer verwenden möchten, wird die folgende Methode zum Platzieren von sshSchlüsseln auf einem Server empfohlen :

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Auf diese Weise können Sie sshddas Verzeichnis und die Dateien mit den erforderlichen Berechtigungen erstellen. Dies bedeutet, dass Sie keine Chance haben, Berechtigungen zu verfälschen oder sich die Details zu merken. Verwenden Sie einfach das Tool, um die Schlüssel hochzuladen.

Deaktivieren Sie die Kennwortauthentifizierung

Allerdings wird empfohlen, die Kennwortauthentifizierung in zu deaktivieren sshdund den Dienst neu zu starten , sobald Sie den Schlüssel selbst erstellt und überprüft haben, dass Sie eine Verbindung mit den Schlüsseln herstellen können :

  1. Bearbeiten /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

Was ist mit neuen Benutzern?

Wie können Sie neue Benutzer eingeben, wenn Sie die Kennwortauthentifizierung deaktivieren? Eine Möglichkeit besteht darin, Vorlagendateien zum /etc/skelVerzeichnis hinzuzufügen . Wenn Sie einen Benutzer eingegeben haben, gehen Sie wie folgt vor:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Bearbeiten Sie alle darin gefundenen Dateien /etc/skel/.ssh/so, dass sie leer sind, es sei denn, Sie möchten sich automatisch für jeden neu erstellten Benutzer eingeben.

Wenn Sie neue Benutzer mit erstellen sudo useradd -m newuser, hat dieser Benutzer .ssh/authorized_keysdie Berechtigung, die Sie bearbeiten können, und verfügt über die entsprechenden Berechtigungen.

Debuggen

In der sshdProtokolldatei können Sie nachlesen, warum Verbindungen fehlschlagen oder abgelehnt werden:

  1. sudo tail -f /var/log/auth.log

Verwenden Sie während der Ausführung dieses Befehls ein anderes Terminal, um eine Anmeldung zu versuchen. Oft sind die bereitgestellten Nachrichten gut genug, um das Problem zu lokalisieren oder online eine Lösung zu finden.


1
Der Debugging-Schritt hat bei mir funktioniert. Das Stammverzeichnis hatte die falschen Berechtigungen (musste 700 sein)
Naisanza

12

Ssh ist sehr wählerisch in Bezug auf Besitz-, Datei- und Verzeichnisberechtigungen mit SSH-Schlüsseln.

~ / .ssh / sollte im Besitz des Besitzers sein und über 700 Berechtigungen verfügen. ~ / .ssh / authorized_keys sollte dem Besitzer gehören und 600 Berechtigungen haben.

Also, für root:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Für Benutzer mich:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

Und dann nochmal versuchen.

Natürlich sollten Sie auch in / etc / ssh / sshd_config nachsehen, ob sich root überhaupt anmelden darf oder nur mit ssh-Schlüsseln.

Wenn Sie haben :

PasswordAuthentication no

dann können Sie einstellen:

PermitRootLogin yes

Und dann starte sshd neu:

/etc/init.d/sshd restart

und versuche es erneut.

Beachten Sie, dass mit ssh der sshd-Daemon neu gestartet werden kann, auch wenn dafür eine ssh-Sitzung verwendet wird.

Wenn Sie sich Ihre hochgeladenen Protokolldatei-Schnipsel ansehen, scheint es, dass Sie MacOSX verwenden? Könnten Sie dort einen neuen SSH-Schlüssel erstellen?

Außerdem habe ich in der Vergangenheit festgestellt, dass es manchmal unmöglich ist, sich remote mit ssh anzumelden, wenn auf meinem lokalen Computer mehr als ein privater SSH-Schlüssel für meinen Benutzer vorhanden ist. Es hat sehr geholfen, Einträge auf dem lokalen Computer in der Datei ~ / .ssh / config zu machen, um dies zu lösen. Zum Beispiel :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Danach versuchen Sie es auf der Kommandozeile Ihres lokalen Computers:

ssh -v my-vps

Wenn Sie ssh-Schlüssel sowie keine ssh-Schlüssel für einige andere Anmeldungen verwenden, können Sie neben Einträgen mit ssh-Schlüsseln auch ein ssh-Login ohne Verwendung von ssh-Schlüsseln in der Datei ~ / ssh / config definieren, zum Beispiel:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

Das funktioniert gut für mich. Sie können auch festlegen, welcher Schlüssel in der Befehlszeile verwendet werden soll:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

Dies kann das Debuggen vereinfachen, und in der Befehlszeile sollte dies immer auf dem lokalen Computer funktionieren.


Zusätzlich zu dieser Lösung musste ich auch die Berechtigungen für meinen Home-Ordner ändern, damit SSH funktioniert:sudo chmod 700 /home/me/
Rg90

Du bist ein Lebensretter, @ Albert-J! Die IdentityFileLeitung hat mich aus einer stundenlangen Brunft herausgeholt.
Zev

4

Überprüfen Sie die Konfiguration des SSH-Dämons (sollte vorhanden sein /etc/ssh/sshd_config) und prüfen Sie, ob:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Überprüfen Sie auch die Konfigurationsdatei, um festzustellen, ob AllowUsers oder AllowGroups vorhanden sind festgelegt wurden, da sie als für Benutzer bzw. Gruppen fungieren.

Außerdem habe ich festgestellt, dass Sie versuchen, dem Root-Benutzer einen Schlüssel hinzuzufügen. Standardmäßig sollte die Root-Anmeldung deaktiviert sein. Sie können dies jedoch auch über das Feld PermitRootLogin ändern .


Keines davon funktioniert: / Ich Permission denied (publickey)
Jeff

3

Nach den von Ihnen verknüpften Protokollen haben Sie meines Erachtens Probleme, wenn der Client die Datei mit dem privaten Schlüssel nicht findet .

  • Überprüfen Sie zuerst, ob die Datei ~/.ssh/id_rsaauf Ihrem lokalen Computer vorhanden ist und die richtige ist _ (falls Sie mehr haben).

  • Überprüfen Sie die .sshOrdnerberechtigungen (sollte ausgeführt werden drwx------, wenn nicht sudo chmod 700 ~/.ssh) und deren Inhalt (sollte ausgeführt werden -rw-------, wenn nicht sudo chmod 600 ~/.ssh/*) . Wenden Sie dieselben Berechtigungen auch für den Remotecomputer an.

Außerdem können Sie versuchen, die Verwendung Ihres gewünschten privaten Schlüssels zu erzwingen , indem Sie ihn direkt sshmit dem -iParameter übergeben.

  • Sie können so etwas wie Folgendes ausführen:

    ssh -i /path/to/your/private-key root@X.X.X.X

    oder

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

Weitere Informationen erhalten Sie auf der SSH-Manpage ( man sshauf Ihrem Terminal ausgeführt) .

Denken Sie auch daran, wenn Sie sich als rootBenutzer anmelden möchten , muss Ihr Root-Konto aktiviert sein, bevor Sie sich anmelden, ein Passwort für dieses Konto erstellen sudo passwd rootoder Ihr Serveradministrationstool (Ubutntu hat das Root-Konto standardmäßig deaktiviert) . Weitere Informationen erhalten Sie im Ubuntu-Wiki .

Ich hoffe es hilft.


3

Am Ende habe ich erneut installiert, openssh-serverwodurch das Problem behoben wurde. Die Lösungen sind alle großartig, aber sie haben bei mir nicht funktioniert. Ich habe keine Ahnung, was das Problem verursacht hat, aber ich denke, der vorherige Entwickler hat möglicherweise die Konfiguration durcheinander gebracht und die Dinge ziemlich durcheinander gebracht.

Ich bezweifle, dass es jemanden geben wird, der ein so spezifisches Problem hat wie ich. Wenn Sie jedoch über ein Digital Ocean-Droplet verfügen, können Sie keinen SSH-Zugriff erhalten und keine der angegebenen Lösungen funktioniert. Installieren Sie den SSH-Server neu, indem Sie diese Befehle über die Digital Ocean-Konsole ausführen. Beachten Sie, dass dies ein destruktiver Prozess ist und alte Konfigurationsdateien in/etc/ssh/ (nicht in Ihrem .sshVerzeichnis) löscht .

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Vorausgesetzt, Ihr ssh-Client / Ihre ssh-Schlüssel sind in Ordnung, sollten Sie in der Lage sein, SSH auf Ihrem Server auszuführen.


1

Dieses Problem tauchte für mich mit dem Debian-Image auf Digital Ocean auf. Irgendwie wurde während des kurzen Einrichtungsprozesses, wahrscheinlich als ich das root-Passwort festgelegt habe, der Besitzer für /rootden Benutzer geändert debian. Ich habe folgendes in gesehen /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

Durch einfaches Ausführen wurde chown root:root -R /rootdas Problem behoben.

HTH


0

Hatte gerade ein sehr ähnliches Problem. Das hat bei mir funktioniert - Fügen Sie diese Zeile zu / etc / ssh / sshd_config hinzu

AuthorizedKeysFile %h/.ssh/authorized_keys 

Starten Sie dann ssh wie gewohnt neu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.