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 [email protected]
. Das hat nicht funktioniert (Erlaubnis verweigert).
Also habe ich versucht, einen neuen Benutzer hinzuzufügen, das /home/me/.ssh
Verzeichnis mit den Berechtigungen 700
für das .ssh
Verzeichnis selbst und 600
für die authorized_keys
Datei erstellt. Dann habe ich es versucht ssh [email protected]
. 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:
quelle
LogLevel DEBUG3
insshd_config
). Ich vermute, dass dies Berechtigungsprobleme sind, aber dafür kann es mehrere Gründe geben.[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
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 undauth.log
Antworten:
Client-Konfiguration
Installieren
~/.ssh/config
Das Einrichten von Host-Einträgen für
ssh
ist sehr einfach und erspart Ihnen viel Ärger. Hier ist ein Beispiel:In diesem Beispiel richten wir
digitaloceanbox
und eingithub
undgithub.com
so , dass wir die folgenden Befehle tun können:ssh github
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
ssh
SchlüsselnBeachten 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:
.ssh/digitalocean-rsa
.ssh/digitalocean-rsa.pub
Wenn Sie Ihren
ssh
Schlü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,
ssh
auf 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
ssh
als dieser Benutzer oder als Rootbenutzer verwenden möchten, wird die folgende Methode zum Platzieren vonssh
Schlüsseln auf einem Server empfohlen :ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
Auf diese Weise können Sie
sshd
das 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
sshd
und 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 :/etc/ssh/sshd_config
PasswordAuthentication no
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/skel
Verzeichnis hinzuzufügen . Wenn Sie einen Benutzer eingegeben haben, gehen Sie wie folgt vor:sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
/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_keys
die Berechtigung, die Sie bearbeiten können, und verfügt über die entsprechenden Berechtigungen.Debuggen
In der
sshd
Protokolldatei können Sie nachlesen, warum Verbindungen fehlschlagen oder abgelehnt werden: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.
quelle
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:
Für Benutzer mich:
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 :
dann können Sie einstellen:
Und dann starte sshd neu:
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 :
Danach versuchen Sie es auf der Kommandozeile Ihres lokalen Computers:
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:
Das funktioniert gut für mich. Sie können auch festlegen, welcher Schlüssel in der Befehlszeile verwendet werden soll:
Dies kann das Debuggen vereinfachen, und in der Befehlszeile sollte dies immer auf dem lokalen Computer funktionieren.
quelle
sudo chmod 700 /home/me/
IdentityFile
Leitung hat mich aus einer stundenlangen Brunft herausgeholt.Überprüfen Sie die Konfiguration des SSH-Dämons (sollte vorhanden sein
/etc/ssh/sshd_config
) und prüfen Sie, ob:Ü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 .
quelle
Permission denied (publickey)
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_rsa
auf Ihrem lokalen Computer vorhanden ist und die richtige ist _ (falls Sie mehr haben).Überprüfen Sie die
.ssh
Ordnerberechtigungen (sollte ausgeführt werdendrwx------
, wenn nichtsudo chmod 700 ~/.ssh
) und deren Inhalt (sollte ausgeführt werden-rw-------
, wenn nichtsudo 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
ssh
mit dem-i
Parameter übergeben.Sie können so etwas wie Folgendes ausführen:
ssh -i /path/to/your/private-key [email protected]
oder
ssh -i ~/.ssh/id_rsa [email protected]
Weitere Informationen erhalten Sie auf der SSH-Manpage (
man ssh
auf Ihrem Terminal ausgeführt) .Denken Sie auch daran, wenn Sie sich als
root
Benutzer anmelden möchten , muss Ihr Root-Konto aktiviert sein, bevor Sie sich anmelden, ein Passwort für dieses Konto erstellensudo passwd root
oder Ihr Serveradministrationstool (Ubutntu hat das Root-Konto standardmäßig deaktiviert) . Weitere Informationen erhalten Sie im Ubuntu-Wiki .Ich hoffe es hilft.
quelle
Am Ende habe ich erneut installiert,
openssh-server
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/
(nicht in Ihrem.ssh
Verzeichnis) löscht .Vorausgesetzt, Ihr ssh-Client / Ihre ssh-Schlüssel sind in Ordnung, sollten Sie in der Lage sein, SSH auf Ihrem Server auszuführen.
quelle
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
den Benutzer geändertdebian
. 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 /root
das Problem behoben.HTH
quelle
Hatte gerade ein sehr ähnliches Problem. Das hat bei mir funktioniert - Fügen Sie diese Zeile zu / etc / ssh / sshd_config hinzu
Starten Sie dann ssh wie gewohnt neu.
quelle