it-swarm.com.de

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

Ich habe ein Digital Ocean-Tröpfchen, auf das ich mir ssh-Zugriff gewähren 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 habe immer wieder permission denied (publickey) bekommen.

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

Also habe ich versucht, einen neuen Benutzer hinzuzufügen, das Verzeichnis /home/me/.ssh mit den Berechtigungen 700 für das Verzeichnis .ssh selbst und 600 für die Datei authorized_keys erstellt. Dann habe ich ssh [email protected] ausprobiert. 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:

enter image description here

13
Jeff

Am Ende habe ich openssh-server neu installiert, wodurch 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/ löscht (nicht in Ihrem .ssh -Verzeichnis).

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.

3
Jeff

Client-Konfiguration

~/.ssh/config einrichten

Das Einrichten von Host-Einträgen für ssh ist 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 digitaloceanbox und github und github.com ein, damit wir die folgenden Befehle ausführen 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 [email protected] an den Anfang:

Generieren von ssh Schlüsseln

ssh-keygen -t rsa -b 4096 -C [email protected]
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 [email protected]

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

Dadurch werden zwei Dateien erstellt:

  1. .ssh/digitalocean-rsa
    • PRIVATE Schlüssel. Niemals teilen.
  2. .ssh/digitalocean-rsa.pub
    • Öffentlicher Schlüssel. Dies ist, was Sie auf dem Server speichern, um sich zu authentifizieren.

Wenn Sie Ihren ssh Schlüssel angeben, stellen Sie sicher, dass es sich um die .pub Version handelt !! Achten Sie beim Hinzufügen von ~/.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, dass das OP das Verzeichnis /root/.ssh/ löscht, um von vorne zu beginnen.

Es wird nicht empfohlen, ssh zu verwenden, um auf den Root-Benutzer auf dem Remote-System zuzugreifen. Es wird empfohlen, dass Sie ssh mit einem anderen Benutzer verbinden und dann mit Ihrem Kennwort (Sudo su -) zu root eskalieren.

Hinzufügen von Schlüsseln zum Host mit ssh-copy-id

Unabhängig davon, ob Sie einen anderen Benutzer erstellen und ssh als diesen Benutzer oder als Root-Benutzer verwenden möchten, wird die folgende Methode empfohlen, um ssh Schlüssel auf einem Server zu platzieren:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub [email protected]

Dadurch kann sshd das Verzeichnis und die Dateien erstellen, die mit den erforderlichen Berechtigungen benötigt werden. 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 sshd zu deaktivieren und den Dienst neu zu starten, sobald Sie den Schlüssel selbst erstellt und überprüft haben, dass Sie mit den Schlüsseln eine Verbindung herstellen können:

  1. /etc/ssh/sshd_config bearbeiten
  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 Verzeichnis /etc/skel hinzuzufügen. Nachdem 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 in /etc/skel/.ssh/ gefundenen Dateien so, dass sie leer sind, es sei denn, Sie möchten sich automatisch für jeden neu erstellten Benutzer eingeben.

Wenn Sie mit Sudo useradd -m newuser neue Benutzer erstellen, verfügt dieser Benutzer über den .ssh/authorized_keys, den Sie bearbeiten können und der über die entsprechenden Berechtigungen verfügt.

Debuggen

In der Protokolldatei sshd 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.

18
earthmeLon

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. Beispielsweise :

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. Es ist auch möglich zu definieren, welche Taste in der Befehlszeile verwendet werden soll:

ssh -v [email protected] -i .ssh/id_rsa

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

12
albert j

Laut den von Ihnen verlinkten Protokollen haben Sie meiner Meinung nach Probleme auf der Clientseite, wenn Sie die Datei mit dem privaten Schlüssel nicht finden.

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

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

Sie können auch versuchen, Ihren gewünschten privaten Schlüssel zu erzwingen, indem Sie ihn mit dem Parameter -i direkt an ssh übergeben.

Weitere Informationen erhalten Sie auf der SSH-Manpage (führen Sie man ssh auf Ihrem Terminal aus) .

Denken Sie auch daran, wenn Sie sich als root Benutzer anmelden möchten, muss Ihr Root-Konto vor der Anmeldung aktiviert werden und ein Passwort für dieses Konto mit Sudo passwd root oder Ihrem Serververwaltungs-Tool erstellt werden ) (Ubutntu hat das Root-Konto standardmäßig deaktiviert) . Weitere Informationen erhalten Sie unter buntu Wiki .

Ich hoffe es hilft.

3
dgonzalez

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

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Überprüfen Sie auch die Konfigurationsdatei, um festzustellen, ob AllowUsers oder AllowGroups festgelegt wurde, da sie als Whitelists 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.

3
TLin

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 /root in den Benutzer debian geändert. Ich habe folgendes in /var/log/auth.log gesehen:

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

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

HTH

1
Sean Brady

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.

0
bodycheetah