Einführung
OpenSSH ist eine leistungsstarke Sammlung von Tools zur Fernsteuerung und Übertragung von Daten zwischen vernetzten Computern. Sie lernen auch einige der Konfigurationseinstellungen kennen, die mit der OpenSSH-Serveranwendung möglich sind, und wie Sie sie auf Ihrem Ubuntu-System ändern können.OpenSSH ist eine frei verfügbare Version der Secure Shell (SSH) -Protokollfamilie von Tools zur Fernsteuerung oder Übertragung von Dateien zwischen Computern. Herkömmliche Tools wie Telnet oder rcp, die diese Funktionen ausführen, sind unsicher und übertragen das Kennwort des Benutzers im Klartext. OpenSSH bietet einen Server-Daemon und Client-Tools, um sichere, verschlüsselte Fernsteuerungs- und Dateiübertragungsvorgänge zu ermöglichen und die älteren Tools effektiv zu ersetzen.
Die OpenSSH-Serverkomponente sshd wartet kontinuierlich auf Clientverbindungen von einem der Clienttools. Wenn eine Verbindungsanforderung auftritt, richtet sshd die richtige Verbindung ein, abhängig vom Typ des Client-Tools, das eine Verbindung herstellt. Wenn der Remotecomputer beispielsweise eine Verbindung mit der SSH-Clientanwendung herstellt, richtet der OpenSSH-Server nach der Authentifizierung eine Remotesteuerungssitzung ein. Wenn ein Remotebenutzer mit scp eine Verbindung zu einem OpenSSH-Server herstellt, initiiert der OpenSSH-Server-Daemon nach der Authentifizierung eine sichere Kopie der Dateien zwischen dem Server und dem Client. OpenSSH kann viele Authentifizierungsmethoden verwenden, darunter einfaches Kennwort, öffentlicher Schlüssel und Kerberos-Tickets.
Installation
Die Installation der OpenSSH-Client- und Serveranwendungen ist einfach. Um die OpenSSH-Client-Anwendungen auf Ihrem Ubuntu-System zu installieren, verwenden Sie diesen Befehl an einer Terminal-Eingabeaufforderung:
sudo apt install openssh-client
Um die OpenSSH-Server-Anwendung und zugehörige Support-Dateien zu installieren, verwenden Sie diesen Befehl an einer Terminal-Eingabeaufforderung:
sudo apt install openssh-server
Konfiguration
Sie können das Standardverhalten der OpenSSH-Server-Anwendung, sshd, konfigurieren, indem Sie datei /etc/ssh/sshd_config
. Informationen zu den in dieser Datei verwendeten Konfigurationsanweisungen finden Sie auf der entsprechenden Handbuchseite mit dem folgenden Befehl, der an einer Terminalaufforderung ausgegeben wird:
man sshd_config
In der sshd-Konfigurationsdatei gibt es viele Anweisungen, die beispielsweise Kommunikationseinstellungen und Authentifizierungsmodi steuern. Im Folgenden finden Sie Beispiele für Konfigurationsanweisungen, die durch Bearbeiten der Datei /etc/ssh/sshd_config
geändert werden können.
Tipp
Bevor Sie die Konfigurationsdatei bearbeiten, sollten Sie eine Kopie der Originaldatei erstellen und sie vor dem Schreiben schützen, damit Sie die Originaleinstellungen als Referenz haben und bei Bedarf wiederverwenden können.
Kopieren Sie die
/etc/ssh/sshd_config
-Datei und schützen Sie sie vor dem Schreiben mit den folgenden Befehlen, die an einer Terminalaufforderung ausgegeben werden:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.originalsudo chmod a-w /etc/ssh/sshd_config.original
Da der Verlust eines SSH-Servers außerdem bedeuten kann, dass Sie den Weg zu einem Server verlieren, überprüfen Sie die Konfiguration, nachdem Sie sie geändert und den Server neu gestartet haben:
sudo sshd -t -f /etc/ssh/sshd_config
Im Folgenden finden Sie Beispiele für Konfigurationsdirektiven, die Sie ändern können:
- Um OpenSSH auf TCP-Port 2222 anstelle des Standard-TCP-Ports 22 zu setzen, ändern Sie die Port-Direktive als solche:
Port 2222
- Damit Ihr OpenSSH-Server den Inhalt der
/etc/issue.net
-Datei als Pre-Login-Banner anzeigt, fügen Sie einfach diese Zeile in der/etc/ssh/sshd_config
-Datei hinzu oder ändern Sie sie:
Banner /etc/issue.net
Nachdem Sie Änderungen an der /etc/ssh/sshd_config
-Datei vorgenommen haben, speichern Sie die Datei und starten Sie die sshd-Serveranwendung neu, um die Änderungen mit dem folgenden Befehl an einer Terminalaufforderung vorzunehmen:
sudo systemctl restart sshd.service
Warnung
Viele andere Konfigurationsanweisungen für sshd sind verfügbar, um das Verhalten der Serveranwendung an Ihre Bedürfnisse anzupassen. Beachten Sie jedoch, wenn Ihre einzige Zugriffsmethode auf einen Server ssh ist und Sie bei der Konfiguration von sshd über die Datei
/etc/ssh/sshd_config
einen Fehler machen, werden Sie möglicherweise beim Neustart vom Server ausgeschlossen. Wenn außerdem eine falsche Konfigurationsanweisung angegeben wird, kann der sshd-Server den Start verweigern. Seien Sie daher besonders vorsichtig, wenn Sie diese Datei auf einem Remoteserver bearbeiten.
SSH-Schlüssel
SSH ermöglicht die Authentifizierung zwischen zwei Hosts, ohne dass ein Kennwort erforderlich ist. Die SSH-Schlüsselauthentifizierung verwendet einen privaten und einen öffentlichen Schlüssel.
Um die Schlüssel zu generieren, geben Sie an einer Terminalaufforderung Folgendes ein:
ssh-keygen -t rsa
Dadurch werden die Schlüssel mithilfe des RSA-Algorithmus generiert. Zum Zeitpunkt dieses Schreibens haben die generierten Schlüssel 3072 Bit. Sie können die Anzahl der Bits mit der Option -b
ändern. Um beispielsweise Schlüssel mit 4096 Bit zu generieren, können Sie Folgendes tun:
ssh-keygen -t rsa -b 4096
Während des Vorgangs werden Sie zur Eingabe eines Kennworts aufgefordert. Drücken Sie einfach die Eingabetaste, wenn Sie aufgefordert werden, den Schlüssel zu erstellen.
Standardmäßig wird der öffentliche Schlüssel in der Datei ~/.ssh/id_rsa.pub
gespeichert, während ~/.ssh/id_rsa
der private Schlüssel ist. Kopieren Sie nun die Datei id_rsa.pub
auf den Remote-Host und hängen Sie sie an ~/.ssh/authorized_keys
an, indem Sie Folgendes eingeben:
ssh-copy-id username@remotehost
Überprüfen Sie abschließend die Berechtigungen für die Datei authorized_keys
. Nur der authentifizierte Benutzer sollte über Lese- und Schreibberechtigungen verfügen. Wenn die Berechtigungen nicht korrekt sind, ändern Sie sie durch:
chmod 600 .ssh/authorized_keys
Sie sollten jetzt in der Lage sein, SSH zum Host zu senden, ohne nach einem Passwort gefragt zu werden.
Schlüssel von öffentlichen Schlüsselservern importieren
Heutzutage haben viele Benutzer bereits SSH-Schlüssel bei Diensten wie Launchpad oder github registriert. Diese können einfach importiert werden mit:
ssh-import-id <username-on-remote-service>
Das Präfix lp:
ist impliziert und bedeutet das Abrufen vom Launchpad, die Alternative gh:
lässt das Tool stattdessen von github abrufen.
Zwei-Faktor-Authentifizierung mit U2F/FIDO
OpenSSH 8.2 unterstützung für U2F / FIDO-Hardware-Authentifizierungsgeräte hinzugefügt. Diese Geräte werden verwendet, um eine zusätzliche Sicherheitsebene zusätzlich zur vorhandenen schlüsselbasierten Authentifizierung bereitzustellen, da das Hardware-Token vorhanden sein muss, um die Authentifizierung abzuschließen.
Es ist sehr einfach zu bedienen und einzurichten. Der einzige zusätzliche Schritt besteht darin, ein neues Schlüsselpaar zu generieren, das mit dem Hardwaregerät verwendet werden kann. Dafür gibt es zwei Schlüsseltypen, die verwendet werden können: ecdsa-sk
und ed25519-sk
. Ersteres bietet eine breitere Hardwareunterstützung, während letzteres möglicherweise ein neueres Gerät benötigt.
Sobald das Schlüsselpaar generiert wurde, kann es verwendet werden, wie Sie normalerweise jeden anderen Schlüsseltyp in openssh verwenden würden. Die einzige Voraussetzung ist, dass das U2F-Gerät auf dem Host vorhanden sein muss, um den privaten Schlüssel verwenden zu können.
Stecken Sie beispielsweise das U2F-Gerät ein und generieren Sie ein Schlüsselpaar, das Sie damit verwenden können:
$ ssh-keygen -t ecdsa-skGenerating public/private ecdsa-sk key pair.You may need to touch your authenticator to authorize key generation. <-- touch deviceEnter file in which to save the key (/home/ubuntu/.ssh/id_ecdsa_sk): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_ecdsa_skYour public key has been saved in /home/ubuntu/.ssh/id_ecdsa_sk.pubThe key fingerprint is:SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo ubuntu@focal
Übertragen Sie nun einfach den öffentlichen Teil auf den Server an ~/.ssh/authorized_keys
und schon kann es losgehen:
$ ssh -i .ssh/id_ecdsa_sk [email protected] user presence for key ECDSA-SK SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo <-- touch deviceWelcome to Ubuntu Focal Fossa (GNU/Linux 5.4.0-21-generic x86_64)(...)[email protected]:~$