Aktivieren Sie den SSHD-Vorgang im Docker

Aktivieren Sie den SSHD-Vorgang im Docker

Installieren Sie zunächst den OpenSSH-Server im Docker. Wechseln Sie nach Abschluss der Installation in das Installationsverzeichnis /etc/ssh des OpenSSH-Servers.

Führen Sie ssh-keygen aus, um den entsprechenden Schlüssel zu generieren.

Schauen Sie sich zunächst die SSHD-Konfigurationsdatei sshd_config an, die Folgendes enthält:

Hostschlüssel /etc/ssh/ssh_host_rsa_key
#HostSchlüssel /etc/ssh/ssh_host_dsa_key
Hostschlüssel /etc/ssh/ssh_host_ecdsa_key
Hostschlüssel /etc/ssh/ssh_host_ed25519_key

Es gibt Verschlüsselungsverfahren wie RSA, DSA, ECDSA und ED25519. Die entsprechenden Schlüsselpaare werden nach diesen Verschlüsselungsverfahren generiert.

[root@655f62a4ed82 ssh]# ssh-keygen -t rsa //RSA generieren
Generieren eines öffentlichen/privaten RSA-Schlüsselpaars.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_rsa): 
Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): 
Geben Sie dieselbe Passphrase erneut ein: 
Ihre Identifikation wurde in /root/.ssh/id_rsa gespeichert.
Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_rsa.pub gespeichert.
Der Schlüsselfingerabdruck ist:
0e:fa:07:36:bb:87:c1:60:14:be:41:41:01:1b:4b:bc root@655f62a4ed82
Das Randomart-Bild des Schlüssels ist:
+--[RSA 2048]----+
| .+o*+ |
| ..*. |
|oooo|
| E oo |
| ..o.S |
| .*o |
| .. *. |
| .oo |
| o+ |
+-----------------+
[root@655f62a4ed82 ssh]# ssh-keygen -t dsa //dsa generieren
Generieren eines öffentlichen/privaten DSA-Schlüsselpaars.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_dsa): 
Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): 
Geben Sie dieselbe Passphrase erneut ein: 
Ihre Identifikation wurde in /root/.ssh/id_dsa gespeichert.
Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_dsa.pub gespeichert.
Der Schlüsselfingerabdruck ist:
ee:8c:db:a8:24:68:0d:33:79:eb:09:33:ed:74:c3:66 root@655f62a4ed82
Das Randomart-Bild des Schlüssels ist:
+--[DSA 1024]----+
| |
| |
| |
| . |
| = .
| .B o . |
|.=.=.E . |
|.Bo= .* |
| +..+.+ |
+-----------------+
[root@655f62a4ed82 ssh]# ssh-keygen -t ecdsa //ECDSA generieren
Generieren eines öffentlichen/privaten ECDSA-Schlüsselpaars.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_ecdsa): 
Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): 
Geben Sie dieselbe Passphrase erneut ein: 
Ihre Identifikation wurde in /root/.ssh/id_ecdsa gespeichert.
Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_ecdsa.pub gespeichert.
Der Schlüsselfingerabdruck ist:
84:74:de:d1:e4:98:a1:5c:27:25:8e:b7:d6:27:fd:c9 root@655f62a4ed82
Das Randomart-Bild des Schlüssels ist:
+--[ECDSA 256]---+
| . . *++ |
| . = * X. |
| . * * . |
| . . o . |
|S ooo |
| . o...|
| E.|
| |
| |
+-----------------+
[root@655f62a4ed82 ssh]# ssh-keygen -t ed25519
Öffentliches/privates ed25519-Schlüsselpaar wird generiert.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_ed25519): 
Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): 
Geben Sie dieselbe Passphrase erneut ein: 
Ihre Identifikation wurde in /root/.ssh/id_ed25519 gespeichert.
Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_ed25519.pub gespeichert.
Der Schlüsselfingerabdruck ist:
d8:40:95:1f:07:96:8a:83:7f:af:19:01:3b:b4:79:91 Wurzel@655f62a4ed82
Das Randomart-Bild des Schlüssels ist:
+--[ED25519 256--+
| ....oo |
| . .oo . |
| .+.Eo o |
| ..oO... |
| .*.S |
| .o.. |
| ... |
| o. |
| o. |
+-----------------+
[root@655f62a4ed82 ssh]# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

Nachdem das Schlüsselpaar generiert wurde, müssen Sie den Speicherort der oben genannten Dateien in sshd_config ändern.

Hostschlüssel /root/.ssh/id_rsa
Hostschlüssel /root/.ssh/id_dsa
Hostschlüssel /root/.ssh/id_ecdsa
Hostschlüssel /root/.ssh/id_ed25519

Führen Sie /usr/sbin/sshd aus, um zu prüfen, ob Port 22 aktiviert ist. Wenn er aktiviert ist, bedeutet dies, dass der Start erfolgreich war.

[root@655f62a4ed82 ssh]# /usr/sbin/sshd
[root@655f62a4ed82 ssh]# lsof -i:22
BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME
sshd 37 root 3u IPv4 250907 0t0 TCP *:ssh (HÖREN)
sshd 37 root 4u IPv6 250909 0t0 TCP *:ssh (HÖREN)

Zusatzwissen: Beim Ausführen des SSHD-Prozesses im Docker-Container stürzt der Remote-Login ab (Exit-Status 254)

Notiz:

Hintergrund

Im Container wird ein SSHD-Prozess ausgeführt, der einen Port für die externe Remote-Verbindung zuordnet. Bei jeder Verbindung werden Sie sofort nach Eingabe des Passworts abgemeldet. Das Phänomen ist wie folgt:

[root@localhost /]# ssh [email protected] -p 8000
Passwort von [email protected]: 
Letzte Anmeldung: Di 6. Nov 2018 14:46:17 von 192.168.0.6
Verbindung zu 192.168.0.6 geschlossen.

Überprüfen Sie die Debuginformationen. Der endgültige Ausgabeausdruck lautet wie folgt:

......
Verbindung zu 192.168.0.6 geschlossen.
Übertragen: 2264 gesendet, 2224 Bytes empfangen, in 0,0 Sekunden
Bytes pro Sekunde: gesendet 235367,6, empfangen 231209,1
debug1: Beendigungsstatus 254

analysieren

Aus dem Ausdruck ist bereits die letzte Anmeldung ersichtlich, das Passwort muss also korrekt eingegeben worden sein und ich habe mich zwar am System angemeldet, allerdings ist die Initialisierung der Umgebung fehlgeschlagen. Zuerst habe ich mir die Konfiguration von hosts.deny angesehen. Nach dem Kommentieren der entsprechenden Konfiguration besteht das Problem weiterhin.

Im Internet heißt es, dass das Auskommentieren der UsePAM-Konfiguration in der SSHD-Konfigurationsdatei bedeutet, dass das PAM-Authentifizierungsmodul nicht verwendet wird.

#UsePAM ja

Nach dem Ändern und Neustarten des SSHD-Prozesses funktioniert dieser wie erwartet. Als Grund wurde von allen angegeben, dass die Funktion zur Trennung bei Zeitüberschreitung in der Standardkonfiguration aktiviert war. Das ist Unsinn. Die Standardzeit zum Trennen der Verbindung kann nicht so kurz sein, und warum läuft der SSHD-Prozess in einer Nicht-Docker-Umgebung normal? Ich akzeptiere diesen Grund nicht. Dann schauen wir doch nochmal vorbei. Es gibt kein Problem, wenn keine PAM-Authentifizierung verwendet wird, daher habe ich die SSHD-bezogenen Konfigurationen in /etc/pam.d/ nacheinander auskommentiert, konnte das Problem aber immer noch nicht finden.

Ich dachte, ich könnte jetzt einen Blick auf das PAM-Protokoll werfen, das einige Hinweise liefern sollte. Übrigens speichern RedHat und CentOS PAM-Protokolle in /var/log/secure und Ubuntu und Debian speichern Authentifizierungsinformationen in /var/log/auth.log.

Tatsächlich gibt es in Pam eine Fehlermeldung.

6. Nov 15:36:56 bbb sshd[11016]: Akzeptiertes Passwort für Root von 192.168.0.6 Port 56394 ssh2
6. Nov 15:36:56 bbb sshd[11016]: pam_limits(sshd:session): Limit für „nproc“ konnte nicht gesetzt werden: Vorgang nicht zulässig
6. Nov 15:36:56 bbb sshd[11016]: pam_limits(sshd:session): Limit für „nofile“ konnte nicht festgelegt werden: Vorgang nicht zulässig
6. Nov 15:36:56 bbb sshd[11016]: pam_limits(sshd:session): Limit für „memlock“ konnte nicht gesetzt werden: Vorgang nicht zulässig
6. Nov 15:36:56 bbb sshd[11016]: pam_unix(sshd:session): Sitzung für Benutzer root geöffnet durch (uid=0)
6. Nov 15:36:56 bbb sshd[11016]: Fehler: PAM: pam_open_session(): Zugriff verweigert
6. Nov 15:36:56 bbb sshd[11016]: Trennung von 192.168.0.6 empfangen: 11: Trennung durch Benutzer

Es ist ersichtlich, dass dies durch unzureichende Berechtigungen zum Festlegen von Parametern wie nproc, nofile, memlock usw. verursacht wird. Diese Konfigurationen befinden sich in der PAM-Komponente und werden in den folgenden beiden Dateien gespeichert:

/etc/security/limits.conf

/etc/security/limits.d/90-nproc.conf

Kommentieren Sie die relevanten Einstellungen in diesen beiden Dateien aus, aktivieren Sie die PAM-Authentifizierung und die SSH-Verbindung wird erfolgreich sein. Das ist das Problem.

Es gibt andere Methoden

1. Da dies durch unzureichende Berechtigungen verursacht wird, bringen Sie beim Starten des Containers den Parameter --privileged mit und verwenden Sie einen privilegierten Benutzer, um das Problem zu lösen

2. Da beim Konfigurieren von ulimits ein Fehler auftritt, können Sie den Parameter --ulimit=[] verwenden, um es beim Starten des Containers zu konfigurieren

Der obige Artikel über das Aktivieren des SSHD-Betriebs in Docker ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Lösen Sie das Problem, dass beim Ausführen von Docker zwei Ports gestartet werden, die unterschiedliche Ports belegen
  • Zwei Möglichkeiten zum Beenden von Bash im Docker-Container unter Linux
  • Docker verwendet Supervisor zur Verwaltung von Prozessvorgängen

<<:  Zusammenfassung der allgemeinen Funktionen und Verwendungsmethoden der WeChat-Applet-Entwicklung

>>:  MySQL-Abfragedaten stündlich, geben Sie 0 ein, wenn keine Daten vorhanden sind

Artikel empfehlen

Beispiel für den schnellen Aufbau einer LEMP-Umgebung mit Docker

LEMP (Linux + Nginx + MySQL + PHP) ist heutzutage...

Mysql behält den vorhandenen Inhalt bei und fügt später Inhalte hinzu

Dieser Befehl ändert die Datentabelle ff_vod und ...

Tiefes Verständnis des Mechanismus des CSS-Hintergrund-Blend-Modus

Dieser Artikel darf gerne geteilt und zusammengef...

MySQL-Abfrageoptimierung: Ursachen und Lösungen für langsame Abfragen

Freunde, die in der Entwicklung tätig sind, insbe...

Beispiel-Tutorial zur JavaScript-Typerkennungsmethode

Vorwort JavaScript ist eine der am häufigsten ver...

Lösung für den MySQL-Root-Passwortfehler Nummer 1045

MySQL-Dienst stoppen Klicken Sie in Windows mit d...

Webdesign-Erfahrung: Effizientes Schreiben von Webcode

Ursprünglich sollte dieses siebte Kapitel eine aus...

Popularisierung der Theorie – Benutzererfahrung

1. Konzeptanalyse 1: UE User Experience <br /&...

Detaillierte Erläuterung des Speichermodells der JVM-Serie

Inhaltsverzeichnis 1. Speichermodell und Laufzeit...

Vue 2.0 Grundlagen im Detail

Inhaltsverzeichnis 1. Funktionen 2. Beispiele 3. ...

So bereinigen Sie Ihre Docker-Daten vollständig

Inhaltsverzeichnis Regelmäßig beschneiden Spiegel...

Lösung zum Verlassen von Lücken zwischen BootStrap-Rastern

Inhaltsverzeichnis [Siehe ein Beispiel]: [Der urs...

CSS3-Randeffekte

Was ist CSS? CSS (Abkürzung für Cascading Style S...

Schneller Einstieg in die Teleport-Komponenten und Verwendungssyntax von VUE 3

Inhaltsverzeichnis 1. Einführung in das Teleporti...