SSH-Grundlagen: Arbeiten mit SSH-Servern, -Clients und -Schlüsseln

Einführung

SSH ist ein sicheres Protokoll, das als Hauptmittel für die Remote-Verbindung zu Linux-Servern verwendet wird. Es bietet eine textbasierte Oberfläche, indem eine Remote-Shell erstellt wird. Nach dem Herstellen der Verbindung werden alle Befehle, die Sie in Ihr lokales Terminal eingeben, an den Remote-Server gesendet und dort ausgeführt.

In diesem Leitfaden im Spickzettelstil werden einige gängige Methoden für die Verbindung mit SSH behandelt, um Ihre Ziele zu erreichen. Dies kann als Kurzreferenz verwendet werden, wenn Sie wissen müssen, wie Sie eine Verbindung zu Ihrem Server herstellen oder ihn auf verschiedene Arten konfigurieren können.

Verwendung dieses Handbuchs

  • Lesen Sie zuerst den Abschnitt SSH-Übersicht, wenn Sie mit SSH im Allgemeinen nicht vertraut sind oder gerade erst anfangen.

  • Verwenden Sie die nachfolgenden Abschnitte, die sich auf das beziehen, was Sie erreichen möchten. Die meisten Abschnitte basieren auf keinem anderen, sodass Sie die folgenden Beispiele unabhängig voneinander verwenden können.

  • Verwenden Sie das Menü "Inhalt" auf der linken Seite (bei großen Seitenbreiten) oder die Suchfunktion Ihres Browsers, um die gewünschten Abschnitte zu finden.

  • Kopieren Sie die angegebenen Befehlszeilenbeispiele und fügen Sie sie ein. Ersetzen Sie dabei die Werte in ++ durch Ihre eigenen Werte.

SSH-Übersicht

Die häufigste Art, eine Verbindung zu einem entfernten Linux-Server herzustellen, ist SSH. SSH steht für Secure Shell und bietet eine sichere Möglichkeit, Befehle auszuführen, Änderungen vorzunehmen und Dienste remote zu konfigurieren. Wenn Sie über SSH eine Verbindung herstellen, melden Sie sich mit einem Konto an, das auf dem Remoteserver vorhanden ist.

So funktioniert SSH

Wenn Sie über SSH eine Verbindung herstellen, werden Sie in eine Shell-Sitzung versetzt, bei der es sich um eine textbasierte Schnittstelle handelt, über die Sie mit Ihrem Server interagieren können. Während der Dauer Ihrer SSH-Sitzung werden alle Befehle, die Sie in Ihr lokales Terminal eingeben, über einen verschlüsselten SSH-Tunnel gesendet und auf Ihrem Server ausgeführt.

Die SSH-Verbindung wird mithilfe eines Client-Server-Modells implementiert. Dies bedeutet, dass für den Aufbau einer SSH-Verbindung auf dem Remote-Computer eine Software ausgeführt werden muss, die als SSH-Dämon bezeichnet wird. Diese Software wartet auf Verbindungen an einem bestimmten Netzwerkport, authentifiziert Verbindungsanforderungen und erzeugt die entsprechende Umgebung, wenn der Benutzer die richtigen Anmeldeinformationen angibt.

Der Computer des Benutzers muss über einen SSH-Client verfügen. Hierbei handelt es sich um eine Software, die mit dem SSH-Protokoll kommunizieren kann und Informationen über den zu verbindenden Remotehost, den zu verwendenden Benutzernamen und die Anmeldeinformationen enthält, die zur Authentifizierung übergeben werden sollen. Der Client kann auch bestimmte Details zum Verbindungstyp angeben, den er herstellen möchte.

So authentifiziert SSH Benutzer

Clients authentifizieren sich im Allgemeinen entweder mit Kennwörtern (weniger sicher und nicht empfohlen) oder mit SSH-Schlüsseln, die sehr sicher sind.

Kennwortanmeldungen werden verschlüsselt und sind für neue Benutzer leicht verständlich. Automatische Bots und böswillige Benutzer versuchen jedoch häufig wiederholt, sich bei Konten zu authentifizieren, die kennwortbasierte Anmeldungen ermöglichen, was zu Sicherheitsverletzungen führen kann. Aus diesem Grund empfehlen wir, für die meisten Konfigurationen immer die SSH-Schlüssel-basierte Authentifizierung einzurichten.

SSH-Schlüssel sind ein passender Satz von kryptografischen Schlüsseln, die zur Authentifizierung verwendet werden können. Jeder Satz enthält einen öffentlichen und einen privaten Schlüssel. Der öffentliche Schlüssel kann ohne Bedenken frei weitergegeben werden, während der private Schlüssel wachsam gehütet und niemandem zugänglich gemacht werden muss.

Um sich mit SSH-Schlüsseln zu authentifizieren, muss ein Benutzer auf seinem lokalen Computer über ein SSH-Schlüsselpaar verfügen. Auf dem Remote-Server muss der öffentliche Schlüssel in eine Datei im Ausgangsverzeichnis des Benutzers unter "+ ~ / .ssh / authorized_keys +" kopiert werden. Diese Datei enthält eine Liste von öffentlichen Schlüsseln (ein Schlüssel pro Zeile), die berechtigt sind, sich bei diesem Konto anzumelden.

Wenn ein Client eine Verbindung zum Host herstellt und die SSH-Schlüsselauthentifizierung verwenden möchte, informiert er den Server über diese Absicht und teilt dem Server mit, welcher öffentliche Schlüssel verwendet werden soll. Der Server überprüft dann die Datei + authorized_keys + auf den öffentlichen Schlüssel, generiert eine zufällige Zeichenfolge und verschlüsselt sie mit dem öffentlichen Schlüssel. Diese verschlüsselte Nachricht kann nur mit dem zugehörigen privaten Schlüssel entschlüsselt werden. Der Server sendet diese verschlüsselte Nachricht an den Client, um zu testen, ob er tatsächlich über den zugehörigen privaten Schlüssel verfügt.

Nach Erhalt dieser Nachricht entschlüsselt der Client sie mit dem privaten Schlüssel und kombiniert die aufgedeckte Zufallszeichenfolge mit einer zuvor ausgehandelten Sitzungs-ID. Anschließend wird ein MD5-Hash dieses Werts generiert und an den Server zurückgesendet. Der Server hatte bereits die ursprüngliche Nachricht und die Sitzungs-ID, sodass er einen von diesen Werten generierten MD5-Hash vergleichen und feststellen kann, dass der Client über den privaten Schlüssel verfügen muss.

Nachdem Sie nun wissen, wie SSH funktioniert, können Sie einige Beispiele diskutieren, um die verschiedenen Möglichkeiten der Arbeit mit SSH zu demonstrieren

Generieren und Arbeiten mit SSH-Schlüsseln

In diesem Abschnitt wird erläutert, wie SSH-Schlüssel auf einem Client-Computer generiert und der öffentliche Schlüssel an die Server verteilt werden, auf denen sie verwendet werden sollen. Dies ist ein guter Abschnitt für den Anfang, wenn Sie aufgrund der erhöhten Sicherheit, die zukünftige Verbindungen ermöglicht, noch keine Schlüssel generiert haben.

Generieren eines SSH-Schlüsselpaars

Das Generieren eines neuen öffentlichen und privaten SSH-Schlüsselpaars auf Ihrem lokalen Computer ist der erste Schritt zur Authentifizierung mit einem Remote-Server ohne Kennwort. Sofern es keinen guten Grund dafür gibt, sollten Sie sich immer mit SSH-Schlüsseln authentifizieren.

Eine Reihe von kryptografischen Algorithmen kann zum Generieren von SSH-Schlüsseln verwendet werden, einschließlich RSA, DSA und ECDSA. RSA-Schlüssel werden im Allgemeinen bevorzugt und sind der Standardschlüsseltyp.

Geben Sie Folgendes ein, um ein RSA-Schlüsselpaar auf Ihrem lokalen Computer zu generieren:

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Über diese Eingabeaufforderung können Sie den Speicherort für Ihren privaten RSA-Schlüssel auswählen. Drücken Sie die EINGABETASTE, um die Standardeinstellung zu übernehmen. Sie werden dann im versteckten Verzeichnis "+ .ssh +" des Basisverzeichnisses Ihres Benutzers gespeichert. Wenn Sie den Standardspeicherort ausgewählt lassen, kann Ihr SSH-Client die Schlüssel automatisch finden.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Bei der nächsten Eingabeaufforderung können Sie eine Passphrase beliebiger Länge eingeben, um Ihren privaten Schlüssel zu sichern. Standardmäßig müssen Sie jedes Mal, wenn Sie den privaten Schlüssel verwenden, eine Passphrase eingeben, die Sie hier als zusätzliche Sicherheitsmaßnahme festgelegt haben. Drücken Sie die EINGABETASTE, um dieses Feld leer zu lassen, wenn Sie keine Passphrase möchten. Beachten Sie jedoch, dass sich jeder, der die Kontrolle über Ihren privaten Schlüssel erlangt, auf Ihren Servern anmelden kann.

Wenn Sie eine Passphrase eingeben, wird bei der Eingabe nichts angezeigt. Dies ist eine Sicherheitsmaßnahme.

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

Diese Prozedur hat ein RSA-SSH-Schlüsselpaar generiert, das sich im versteckten Verzeichnis "+ .ssh +" des Basisverzeichnisses Ihres Benutzers befindet. Diese Dateien sind:

  • + ~ / .ssh / id_rsa +: Der private Schlüssel. DIESE DATEI NICHT TEILEN!

  • + ~ / .ssh / id_rsa.pub +: Der zugehörige öffentliche Schlüssel. Dies kann ohne Konsequenz frei geteilt werden.

Generieren Sie ein SSH-Schlüsselpaar mit einer größeren Anzahl von Bits

SSH-Schlüssel haben standardmäßig 2048 Bit. Dies wird im Allgemeinen als ausreichend für die Sicherheit angesehen, Sie können jedoch eine größere Anzahl von Bits für einen gehärteten Schlüssel angeben.

Fügen Sie dazu das Argument "+ -b +" mit der Anzahl der gewünschten Bits ein. Die meisten Server unterstützen Schlüssel mit einer Länge von mindestens 4096 Bit. Längere Schlüssel werden aus Gründen des DDOS-Schutzes möglicherweise nicht akzeptiert:

ssh-keygen -b 4096

Wenn Sie zuvor einen anderen Schlüssel erstellt haben, werden Sie gefragt, ob Sie Ihren vorherigen Schlüssel überschreiben möchten:

Overwrite (y/n)?

Wenn Sie "Ja" wählen, wird Ihr vorheriger Schlüssel überschrieben und Sie können sich mit diesem Schlüssel nicht mehr bei Servern anmelden. Achten Sie aus diesem Grund darauf, die Schlüssel mit Vorsicht zu überschreiben.

Entfernen oder Ändern der Passphrase eines privaten Schlüssels

Wenn Sie eine Passphrase für Ihren privaten Schlüssel erstellt haben und diese ändern oder entfernen möchten, können Sie dies ganz einfach tun.

  • Hinweis *: Um die Passphrase zu ändern oder zu entfernen, müssen Sie die ursprüngliche Passphrase kennen. Wenn Sie die Passphrase für den Schlüssel verloren haben, gibt es keine Möglichkeit, und Sie müssen ein neues Schlüsselpaar generieren.

Um die Passphrase zu ändern oder zu entfernen, geben Sie einfach Folgendes ein:

ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):

Sie können die Position des Schlüssels eingeben, den Sie ändern möchten, oder die EINGABETASTE drücken, um den Standardwert zu übernehmen:

Enter old passphrase:

Geben Sie die alte Passphrase ein, die Sie ändern möchten. Sie werden dann aufgefordert, eine neue Passphrase einzugeben:

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

Geben Sie hier Ihre neue Passphrase ein oder drücken Sie die EINGABETASTE, um die Passphrase zu entfernen.

Anzeigen des SSH-Schlüssel-Fingerabdrucks

Jedes SSH-Schlüsselpaar hat einen einzigen kryptografischen „Fingerabdruck“, mit dem die Schlüssel eindeutig identifiziert werden können. Dies kann in verschiedenen Situationen nützlich sein.

Geben Sie Folgendes ein, um den Fingerabdruck eines SSH-Schlüssels zu ermitteln:

ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa):

Sie können die EINGABETASTE drücken, wenn dies die richtige Position des Schlüssels ist, oder die überarbeitete Position eingeben. Sie erhalten eine Zeichenfolge, die die Bitlänge des Schlüssels, den Fingerabdruck sowie das Konto und den Host enthält, für die er erstellt wurde, und den verwendeten Algorithmus:

4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e  demo@test (RSA)

Kopieren Sie Ihren öffentlichen SSH-Schlüssel auf einen Server mit SSH-Copy-ID

Zum Kopieren Ihres öffentlichen Schlüssels auf einen Server, mit dem Sie sich ohne Kennwort authentifizieren können, können verschiedene Methoden verwendet werden.

Wenn auf Ihrem Server derzeit ein kennwortbasierter SSH-Zugriff konfiguriert ist und das Dienstprogramm + ssh-copy-id + installiert ist, ist dies ein einfacher Vorgang. Das Tool + ssh-copy-id + ist in OpenSSH-Paketen vieler Linux-Distributionen enthalten, daher wird es möglicherweise standardmäßig installiert.

Wenn Sie diese Option haben, können Sie Ihren öffentlichen Schlüssel einfach übertragen, indem Sie Folgendes eingeben:

ssh-copy-id @

Dadurch werden Sie aufgefordert, das Kennwort des Benutzerkontos auf dem Remote-System einzugeben:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Nach der Eingabe des Passworts wird der Inhalt Ihres Schlüssels "+ ~ / .ssh / id_rsa.pub" an das Ende der Datei "+ ~ / .ssh / authorized_keys" des Benutzerkontos angehängt:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

Sie können sich jetzt ohne Passwort in dieses Konto einloggen:

ssh @

Kopieren Ihres öffentlichen SSH-Schlüssels auf einen Server ohne SSH-Copy-ID

Wenn Sie nicht über das Dienstprogramm "+ ssh-copy-id +" verfügen, aber dennoch einen kennwortbasierten SSH-Zugriff auf den Remoteserver haben, können Sie den Inhalt Ihres öffentlichen Schlüssels auf andere Weise kopieren.

Sie können den Inhalt des Schlüssels ausgeben und in den Befehl + ssh + leiten. Auf der Remote-Seite können Sie sicherstellen, dass das Verzeichnis "+ ~ / .ssh " vorhanden ist, und dann den weitergeleiteten Inhalt in die Datei " ~ / .ssh / authorized_keys +" einfügen:

cat ~/.ssh/id_rsa.pub | ssh @ "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Sie werden aufgefordert, das Kennwort für das Remote-Konto einzugeben:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:

Nach Eingabe des Passworts wird Ihr Schlüssel kopiert und Sie können sich ohne Passwort anmelden:

ssh @

Kopieren Sie Ihren öffentlichen SSH-Schlüssel manuell auf einen Server

Wenn Sie keinen kennwortbasierten SSH-Zugriff haben, müssen Sie Ihren öffentlichen Schlüssel manuell zum Remote-Server hinzufügen.

Auf Ihrem lokalen Computer können Sie den Inhalt Ihrer öffentlichen Schlüsseldatei ermitteln, indem Sie Folgendes eingeben:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Sie können diesen Wert kopieren und manuell an der entsprechenden Stelle auf dem Remoteserver einfügen. Sie müssen sich auf andere Weise (z. B. über die DigitalOcean-Webkonsole) beim Remote-Server anmelden.

Erstellen Sie auf dem Remote-Server das Verzeichnis "+ ~ / .ssh +", falls es noch nicht vorhanden ist:

mkdir -p ~/.ssh

Anschließend können Sie die Datei "+ ~ / .ssh / authorized_keys +" erstellen oder anhängen, indem Sie Folgendes eingeben:

echo  >> ~/.ssh/authorized_keys

Sie sollten sich jetzt ohne Kennwort beim Remote-Server anmelden können.

Grundlegende Anweisungen zum Anschließen

Im folgenden Abschnitt werden einige Grundlagen zum Herstellen einer Verbindung zu einem Server mit SSH erläutert.

Verbindung zu einem Remote-Server herstellen

Um eine Verbindung zu einem Remote-Server herzustellen und dort eine Shell-Sitzung zu öffnen, können Sie den Befehl + ssh + verwenden.

In der einfachsten Form wird davon ausgegangen, dass Ihr Benutzername auf Ihrem lokalen Computer mit dem auf dem Remoteserver identisch ist. Wenn dies zutrifft, können Sie eine Verbindung herstellen mit:

ssh

Wenn sich Ihr Benutzername auf dem Remote-Server unterscheidet, müssen Sie den Namen des Remote-Benutzers folgendermaßen übergeben:

ssh @

Wenn Sie zum ersten Mal eine Verbindung zu einem neuen Host herstellen, wird die folgende Meldung angezeigt:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Geben Sie "yes" ein, um die Authentizität des Remote-Hosts zu akzeptieren.

Wenn Sie die Kennwortauthentifizierung verwenden, werden Sie hier zur Eingabe des Kennworts für das Remote-Konto aufgefordert. Wenn Sie SSH-Schlüssel verwenden, werden Sie zur Eingabe der Passphrase Ihres privaten Schlüssels aufgefordert, sofern eine festgelegt ist. Andernfalls werden Sie automatisch angemeldet.

Ausführen eines einzelnen Befehls auf einem Remote-Server

Um einen einzelnen Befehl auf einem Remote-Server auszuführen, anstatt eine Shell-Sitzung zu erzeugen, können Sie den Befehl wie folgt nach den Verbindungsinformationen hinzufügen:

ssh @

Dies stellt eine Verbindung zum Remote-Host her, authentifiziert sich mit Ihren Anmeldeinformationen und führt den von Ihnen angegebenen Befehl aus. Die Verbindung wird sofort danach geschlossen.

Anmelden an einem Server mit einem anderen Port

Standardmäßig wird der SSH-Dämon auf einem Server an Port 22 ausgeführt. Ihr SSH-Client geht davon aus, dass dies der Fall ist, wenn Sie versuchen, eine Verbindung herzustellen. Wenn Ihr SSH-Server einen nicht standardmäßigen Port überwacht (dies wird in einem späteren Abschnitt gezeigt), müssen Sie die neue Portnummer angeben, wenn Sie eine Verbindung mit Ihrem Client herstellen.

Sie können dies tun, indem Sie die Portnummer mit der Option "+ -p +" angeben:

ssh -p  @

Um dies nicht jedes Mal tun zu müssen, wenn Sie sich bei Ihrem Remote-Server anmelden, können Sie eine Konfigurationsdatei im Verzeichnis "+ ~ / .ssh +" im Ausgangsverzeichnis Ihres lokalen Computers erstellen oder bearbeiten.

Bearbeiten oder erstellen Sie die Datei jetzt, indem Sie Folgendes eingeben:

nano ~/.ssh/config

Hier können Sie hostspezifische Konfigurationsoptionen festlegen. Verwenden Sie zum Angeben Ihres neuen Anschlusses ein Format wie das folgende:

Host
   HostName
   Port

Auf diese Weise können Sie sich anmelden, ohne die spezifische Portnummer in der Befehlszeile anzugeben.

Hinzufügen Ihrer SSH-Schlüssel zu einem SSH-Agenten, um die Eingabe der Passphrase zu vermeiden

Wenn Sie eine Passphrase auf Ihrem privaten SSH-Schlüssel haben, werden Sie jedes Mal aufgefordert, die Passphrase einzugeben, wenn Sie sie zum Herstellen einer Verbindung mit einem Remote-Host verwenden.

Um dies nicht wiederholt ausführen zu müssen, können Sie einen SSH-Agenten ausführen. Dieses kleine Dienstprogramm speichert Ihren privaten Schlüssel, nachdem Sie die Passphrase zum ersten Mal eingegeben haben. Es ist für die Dauer Ihrer Terminalsitzung verfügbar, sodass Sie in Zukunft eine Verbindung herstellen können, ohne die Passphrase erneut eingeben zu müssen.

Dies ist auch wichtig, wenn Sie Ihre SSH-Anmeldeinformationen weiterleiten müssen (siehe unten).

Geben Sie Folgendes in Ihre lokale Terminalsitzung ein, um den SSH-Agenten zu starten:

eval $(ssh-agent)
Agent pid 10891

Dadurch wird das Agentenprogramm gestartet und in den Hintergrund gestellt. Jetzt müssen Sie dem Agenten Ihren privaten Schlüssel hinzufügen, damit er Ihren Schlüssel verwalten kann:

ssh-add
Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

Sie müssen Ihre Passphrase eingeben (falls eine festgelegt ist). Anschließend wird Ihre Identitätsdatei zum Agenten hinzugefügt, sodass Sie sich mit Ihrem Schlüssel anmelden können, ohne die Passphrase erneut eingeben zu müssen.

Weiterleiten Ihrer SSH-Anmeldeinformationen zur Verwendung auf einem Server

Wenn Sie von einem anderen Server aus eine Verbindung ohne Kennwort zu einem Server herstellen möchten, müssen Sie Ihre SSH-Schlüsselinformationen weiterleiten. Auf diese Weise können Sie sich mit den Anmeldeinformationen auf Ihrem lokalen Computer über den Server, mit dem Sie verbunden sind, bei einem anderen Server authentifizieren.

Zum Starten müssen Sie Ihren SSH-Agenten starten und Ihren SSH-Schlüssel zum Agenten hinzufügen (siehe oben). Danach müssen Sie sich mit der Option "+ -A +" mit Ihrem ersten Server verbinden. Dadurch werden Ihre Anmeldeinformationen für diese Sitzung an den Server weitergeleitet:

ssh -A @

Von hier aus können Sie SSH auf jeden anderen Host ausführen, auf den Ihr SSH-Schlüssel zugreifen darf. Sie stellen eine Verbindung her, als ob sich Ihr privater SSH-Schlüssel auf diesem Server befindet.

Serverseitige Konfigurationsoptionen

Dieser Abschnitt enthält einige allgemeine serverseitige Konfigurationsoptionen, die die Art und Weise beeinflussen können, wie Ihr Server reagiert, und welche Verbindungstypen zulässig sind.

Deaktivieren der Kennwortauthentifizierung

Wenn SSH-Schlüssel konfiguriert sind, getestet wurden und ordnungsgemäß funktionieren, ist es wahrscheinlich eine gute Idee, die Kennwortauthentifizierung zu deaktivieren. Dadurch wird verhindert, dass sich ein Benutzer mit einem Kennwort bei SSH anmeldet.

Stellen Sie dazu eine Verbindung zu Ihrem Remote-Server her und öffnen Sie die Datei "+ / etc / ssh / sshd_config +" mit den Rechten "root" oder "sudo":

sudo nano /etc/ssh/sshd_config

Suchen Sie in der Datei nach der Direktive "+ PasswordAuthentication +". Wenn es auskommentiert ist, kommentieren Sie es aus. Setzen Sie es auf "Nein", um die Kennwortanmeldungen zu deaktivieren:

PasswordAuthentication no

Speichern und schließen Sie die Datei, nachdem Sie die Änderung vorgenommen haben. Um die Änderungen zu implementieren, sollten Sie den SSH-Dienst neu starten.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Jetzt können sich alle Konten auf dem System nicht mehr mit SSH mit Kennwörtern anmelden.

Ändern des Ports, auf dem der SSH-Daemon ausgeführt wird

Einige Administratoren schlagen vor, dass Sie den Standardport ändern, auf dem SSH ausgeführt wird. Dies kann dazu beitragen, die Anzahl der Authentifizierungsversuche zu verringern, denen Ihr Server durch automatisierte Bots ausgesetzt ist.

Um den Port zu ändern, den der SSH-Dämon überwacht, müssen Sie sich bei Ihrem Remote-Server anmelden. Öffnen Sie die Datei "+ sshd_config " auf dem fernen System mit Root-Rechten, indem Sie sich mit diesem Benutzer anmelden oder " sudo +" verwenden:

sudo nano /etc/ssh/sshd_config

Sobald Sie sich im System befinden, können Sie den Port, auf dem SSH ausgeführt wird, ändern, indem Sie die Spezifikation "+ Port 22 +" ermitteln und an den gewünschten Port anpassen. Um beispielsweise den Port auf 4444 zu ändern, fügen Sie Folgendes in Ihre Datei ein:

Port 22
Port

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Um die Änderungen zu implementieren, müssen Sie den SSH-Dämon neu starten.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Nach dem Neustart des Daemons müssen Sie sich durch Angabe der Portnummer authentifizieren (wie in einem früheren Abschnitt gezeigt).

Einschränkung der Benutzer, die über SSH eine Verbindung herstellen können

Um die Benutzerkonten, die sich über SSH anmelden können, explizit einzuschränken, können Sie verschiedene Ansätze wählen, bei denen jeweils die Konfigurationsdatei des SSH-Dämons bearbeitet wird.

Öffnen Sie diese Datei auf Ihrem Remote-Server jetzt mit Root- oder Sudo-Berechtigungen:

sudo nano /etc/ssh/sshd_config

Die erste Methode zum Angeben der Konten, die sich anmelden dürfen, ist die Verwendung der Direktive "+ AllowUsers ". Suchen Sie in der Datei nach der Direktive " AllowUsers +". Wenn noch keine vorhanden ist, erstellen Sie sie an einer beliebigen Stelle. Listen Sie nach der Anweisung die Benutzerkonten auf, die sich über SSH anmelden dürfen:

AllowUsers

Speichern und schließen Sie die Datei. Starten Sie den Dämon neu, um Ihre Änderungen zu implementieren.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Wenn Sie mit der Gruppenverwaltung vertraut sind, können Sie stattdessen die Direktive + AllowGroups + verwenden. Wenn dies der Fall ist, fügen Sie einfach eine einzelne Gruppe hinzu, der SSH-Zugriff gewährt werden soll (wir erstellen diese Gruppe und fügen die Mitglieder vorübergehend hinzu):

AllowGroups

Speichern und schließen Sie die Datei.

Jetzt können Sie eine Systemgruppe (ohne Basisverzeichnis) erstellen, die der von Ihnen angegebenen Gruppe entspricht, indem Sie Folgendes eingeben:

sudo groupadd -r

Stellen Sie sicher, dass Sie der Gruppe alle erforderlichen Benutzerkonten hinzufügen. Dies kann durch Eingabe erfolgen:

sudo usermod -a -G
sudo usermod -a -G

Starten Sie jetzt den SSH-Daemon neu, um Ihre Änderungen zu implementieren.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Root-Anmeldung deaktivieren

Es ist häufig ratsam, die Root-Anmeldung über SSH vollständig zu deaktivieren, nachdem Sie ein SSH-Benutzerkonto eingerichtet haben, das über die Berechtigung "+ sudo +" verfügt.

Öffnen Sie dazu die SSH-Dämon-Konfigurationsdatei mit root oder sudo auf Ihrem Remote-Server.

sudo nano /etc/ssh/sshd_config

Suchen Sie nach einer Direktive mit dem Namen "+ PermitRootLogin +". Wenn es kommentiert ist, kommentieren Sie es aus. Ändern Sie den Wert auf "nein":

PermitRootLogin no

Speichern und schließen Sie die Datei. Starten Sie den SSH-Daemon neu, um Ihre Änderungen zu implementieren.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Ermöglichen des Root-Zugriffs für bestimmte Befehle

In einigen Fällen möchten Sie möglicherweise den Root-Zugriff generell deaktivieren, ihn jedoch aktivieren, damit bestimmte Anwendungen ordnungsgemäß ausgeführt werden können. Ein Beispiel hierfür könnte eine Sicherungsroutine sein.

Dies kann über die Datei "+ authorized_keys +" des Root-Benutzers erfolgen, die SSH-Schlüssel enthält, die zur Verwendung des Kontos berechtigt sind.

Fügen Sie den Schlüssel von Ihrem lokalen Computer, den Sie für diesen Prozess verwenden möchten (wir empfehlen, für jeden automatischen Prozess einen neuen Schlüssel zu erstellen), auf dem Server in die Datei + authorized_keys + des Root-Benutzers ein. Wir werden hier mit dem Befehl + ssh-copy-id + demonstrieren, aber Sie können jede der in anderen Abschnitten beschriebenen Methoden zum Kopieren von Schlüsseln verwenden:

ssh-copy-id root@

Melden Sie sich jetzt beim Remote-Server an. Wir müssen den Eintrag in der Datei + authorized_keys + anpassen, also öffnen Sie ihn mit root- oder sudo-Zugriff:

sudo nano /root/.ssh/authorized_keys

Fügen Sie am Anfang der Zeile mit dem von Ihnen hochgeladenen Schlüssel ein "+ command = +" - Listing hinzu, das den Befehl definiert, für den dieser Schlüssel gültig ist. Dies sollte den vollständigen Pfad zur ausführbaren Datei sowie alle Argumente enthalten:

command="" ssh-rsa ...

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Öffnen Sie nun die Datei "+ sshd_config +" mit den Rechten "root" oder "sudo":

sudo nano /etc/ssh/sshd_config

Suchen Sie die Direktive "+ PermitRootLogin" und ändern Sie den Wert in "+ forced-commands-only". Dies ermöglicht SSH-Schlüsselanmeldungen nur die Verwendung von root, wenn ein Befehl für den Schlüssel angegeben wurde:

PermitRootLogin forced-commands-only

Speichern und schließen Sie die Datei. Starten Sie den SSH-Dämon neu, um Ihre Änderungen zu implementieren.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

X-Anwendungsanzeigen an den Client weiterleiten

Der SSH-Dämon kann so konfiguriert werden, dass die Anzeige von X-Anwendungen auf dem Server automatisch an den Client-Computer weitergeleitet wird. Damit dies ordnungsgemäß funktioniert, muss auf dem Client ein X-Windows-System konfiguriert und aktiviert sein.

Um diese Funktionalität zu aktivieren, melden Sie sich bei Ihrem Remote-Server an und bearbeiten Sie die Datei "+ sshd_config +" als root oder mit sudo-Berechtigungen:

sudo nano /etc/ssh/sshd_config

Suchen Sie nach der Direktive "+ X11Forwarding +". Wenn es auskommentiert ist, kommentieren Sie es aus. Erstellen Sie es bei Bedarf und setzen Sie den Wert auf "yes":

X11Forwarding yes

Speichern und schließen Sie die Datei. Starten Sie Ihren SSH-Daemon neu, um diese Änderungen zu implementieren.

Unter Ubuntu / Debian:

sudo service ssh restart

Unter CentOS / Fedora:

sudo service sshd restart

Um eine Verbindung zum Server herzustellen und die Anzeige einer Anwendung weiterzuleiten, müssen Sie die Option "+ -X +" beim Herstellen der Verbindung vom Client übergeben:

ssh -X @

Grafische Anwendungen, die über diese Sitzung auf dem Server gestartet wurden, sollten auf dem lokalen Computer angezeigt werden. Die Aufführung mag etwas langsam sein, ist aber zur Not sehr hilfreich.

Clientseitige Konfigurationsoptionen

Im nächsten Abschnitt konzentrieren wir uns auf einige Anpassungen, die Sie auf der Clientseite der Verbindung vornehmen können.

Serverspezifische Verbindungsinformationen definieren

Auf Ihrem lokalen Computer können Sie individuelle Konfigurationen für einige oder alle Server definieren, zu denen Sie eine Verbindung herstellen. Diese können in der Datei "+ ~ / .ssh / config +" gespeichert werden, die bei jedem Aufruf von Ihrem SSH-Client gelesen wird.

Erstellen oder öffnen Sie diese Datei in Ihrem Texteditor auf Ihrem lokalen Computer:

nano ~/.ssh/config

Im Inneren können Sie individuelle Konfigurationsoptionen definieren, indem Sie jeweils ein "+ Host " - Schlüsselwort gefolgt von einem Alias ​​eingeben. Darunter und eingerückt können Sie eine der Anweisungen definieren, die in der Manpage ` ssh_config +` zu finden sind:

man ssh_config

Eine Beispielkonfiguration wäre:

Host testhost
   HostName
   Port
   User

Sie können dann über Port 4444 mit dem Benutzernamen "demo" eine Verbindung zu "+ example.com +" herstellen, indem Sie einfach Folgendes eingeben:

ssh testhost

Sie können auch Platzhalter verwenden, um mehrere Hosts zuzuordnen. Denken Sie daran, dass spätere Übereinstimmungen frühere außer Kraft setzen können. Aus diesem Grund sollten Sie Ihre allgemeinsten Übereinstimmungen ganz oben platzieren. Beispielsweise könnten Sie standardmäßig alle Verbindungen so einstellen, dass X-Weiterleitung nicht zulässig ist, mit einer Überschreibung für "+ example.com +", indem Sie dies in Ihrer Datei haben:

Host *
   ForwardX11 no

Host testhost
   HostName
   ForwardX11 yes
   Port
   User

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Verbindungen am Leben erhalten, um Zeitüberschreitung zu vermeiden

Wenn Sie feststellen, dass die Verbindung zu SSH-Sitzungen unterbrochen wurde, bevor Sie bereit sind, tritt möglicherweise ein Zeitlimit für Ihre Verbindung auf.

Sie können Ihren Client so konfigurieren, dass er von Zeit zu Zeit ein Paket an den Server sendet, um diese Situation zu vermeiden:

Auf Ihrem lokalen Computer können Sie dies für jede Verbindung konfigurieren, indem Sie Ihre + ~ / .ssh / config + - Datei bearbeiten. Öffne es jetzt:

nano ~/.ssh/config

Wenn noch keine vorhanden ist, definieren Sie oben in der Datei einen Abschnitt, der allen Hosts entspricht. Stellen Sie "+ ServerAliveInterval +" auf "120", um alle zwei Minuten ein Paket an den Server zu senden. Dies sollte ausreichen, um den Server zu benachrichtigen, die Verbindung nicht zu schließen:

Host *
   ServerAliveInterval 120

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Deaktivieren der Hostüberprüfung

Wenn Sie eine Verbindung zu einem neuen Server herstellen, wird standardmäßig der Fingerabdruck des Host-Schlüssels des Remote-SSH-Dämons angezeigt.

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Dies ist so konfiguriert, dass Sie die Authentizität des Hosts überprüfen können, zu dem Sie eine Verbindung herstellen möchten, und Instanzen erkennen können, bei denen ein böswilliger Benutzer versucht, sich als Remote-Host auszugeben.

Unter bestimmten Umständen möchten Sie diese Funktion möglicherweise deaktivieren. * Hinweis *: Dies kann ein großes Sicherheitsrisiko darstellen. Stellen Sie also sicher, dass Sie wissen, was Sie tun, wenn Sie Ihr System so einrichten.

Um die Änderung vorzunehmen, öffnen Sie die Datei "+ ~ / .ssh / config" auf Ihrem lokalen Computer:

nano ~/.ssh/config

Wenn noch keine vorhanden ist, definieren Sie oben in der Datei einen Abschnitt, der allen Hosts entspricht. Setzen Sie die Direktive "+ StrictHostKeyChecking " auf "no", um der Datei " known_hosts " automatisch neue Hosts hinzuzufügen. Setzen Sie die ` UserKnownHostsFile` auf` + / dev / null`, um nicht auf neuen oder geänderten Hosts zu warnen:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null

Sie können die Überprüfung von Fall zu Fall aktivieren, indem Sie diese Optionen für andere Hosts umkehren. Die Standardeinstellung für "+ StrictHostKeyChecking +" lautet "ask":

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null

Host testhost
   HostName
   StrictHostKeyChecking ask
   UserKnownHostsFile /home//.ssh/known_hosts

Multiplexing von SSH über eine einzelne TCP-Verbindung

Es gibt Situationen, in denen das Herstellen einer neuen TCP-Verbindung länger dauern kann, als Sie möchten. Wenn Sie mehrere Verbindungen zu demselben Computer herstellen, können Sie das Multiplexen nutzen.

Beim SSH-Multiplexing wird dieselbe TCP-Verbindung für mehrere SSH-Sitzungen erneut verwendet. Dadurch entfällt ein Teil der Arbeit, die zum Einrichten einer neuen Sitzung erforderlich ist, und möglicherweise wird die Arbeit beschleunigt. Das Begrenzen der Anzahl der Verbindungen kann auch aus anderen Gründen hilfreich sein.

Um das Multiplexing einzurichten, können Sie die Verbindungen manuell einrichten oder Ihren Client so konfigurieren, dass das Multiplexing automatisch verwendet wird, wenn es verfügbar ist. Wir werden hier die zweite Option demonstrieren.

Bearbeiten Sie zum Konfigurieren von Multiplexing die Konfigurationsdatei Ihres SSH-Clients auf Ihrem lokalen Computer:

nano ~/.ssh/config

Wenn Sie noch keine Wildcard-Host-Definition am Anfang der Datei haben, fügen Sie jetzt eine hinzu (als "+ Host * "). Wir werden die Werte " ControlMaster ", " ControlPath " und " ControlPersist +" festlegen, um unsere Multiplexing-Konfiguration zu erstellen.

Der + ControlMaster + sollte auf "auto" eingestellt sein, um das Multiplexen nach Möglichkeit automatisch zu ermöglichen. Der + ControlPath + legt den Pfad zur Steuerung des Sockets fest. Die erste Sitzung erstellt diesen Socket und nachfolgende Sitzungen können ihn finden, da er nach Benutzername, Host und Port gekennzeichnet ist.

Wenn Sie die Option "+ ControlPersist +" auf "1" setzen, wird die ursprüngliche Masterverbindung im Hintergrund ausgeführt. Die „1“ gibt an, dass die TCP-Verbindung eine Sekunde nach dem Schließen der letzten SSH-Sitzung automatisch beendet werden soll:

Host *
   ControlMaster auto
   ControlPath ~/.ssh/multiplex/%r@%h:%p
   ControlPersist 1

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Jetzt müssen wir das Verzeichnis erstellen, das wir im Steuerpfad angegeben haben:

mkdir ~/.ssh/multiplex

Jetzt versuchen alle Sitzungen, die mit demselben Computer eingerichtet wurden, die vorhandene Socket- und TCP-Verbindung zu verwenden. Wenn die letzte Sitzung existiert, wird die Verbindung nach einer Sekunde abgebrochen.

Wenn Sie aus irgendeinem Grund die Multiplexing-Konfiguration vorübergehend umgehen müssen, können Sie dies tun, indem Sie das Flag "+ -S +" mit "none" übergeben:

ssh -S none @

Einrichten von SSH-Tunneln

Das Tunneln von anderem Verkehr durch einen sicheren SSH-Tunnel ist eine hervorragende Möglichkeit, um restriktive Firewall-Einstellungen zu umgehen. Es ist auch eine großartige Möglichkeit, um ansonsten unverschlüsselten Netzwerkverkehr zu verschlüsseln.

Konfigurieren des lokalen Tunnelns zu einem Server

SSH-Verbindungen können verwendet werden, um Datenverkehr von Ports auf dem lokalen Host zu Ports auf einem Remotehost zu tunneln.

Eine lokale Verbindung ist eine Möglichkeit, über Ihren Remote-Host von Ihrem lokalen Computer auf einen Netzwerkspeicherort zuzugreifen. Zunächst wird eine SSH-Verbindung zu Ihrem Remote-Host hergestellt. Auf dem Remoteserver wird eine Verbindung zu einer externen (oder internen) Netzwerkadresse hergestellt, die vom Benutzer bereitgestellt wird, und der Datenverkehr zu diesem Speicherort wird über einen angegebenen Port zu Ihrem lokalen Computer getunnelt.

Dies wird häufig zum Tunneln in eine weniger eingeschränkte Netzwerkumgebung unter Umgehung einer Firewall verwendet. Eine weitere häufige Verwendung besteht darin, von einem entfernten Standort aus auf eine Weboberfläche zuzugreifen, die nur für lokale Hosts bestimmt ist.

Um einen lokalen Tunnel zu Ihrem Remote-Server einzurichten, müssen Sie beim Herstellen der Verbindung den Parameter "+ -L +" verwenden und drei zusätzliche Informationen angeben:

  • Der lokale Port, an dem Sie auf die getunnelte Verbindung zugreifen möchten.

  • Der Host, zu dem Ihr Remote-Host eine Verbindung herstellen soll.

  • Der Port, über den Ihr Remote-Host eine Verbindung herstellen soll.

Diese werden in der obigen Reihenfolge (durch Doppelpunkte getrennt) als Argumente für das Flag "+ -L " angegeben. Wir werden auch das " -f " - Flag verwenden, das bewirkt, dass SSH vor der Ausführung in den Hintergrund tritt, und das " -N +" - Flag, das keine Shell öffnet oder ein Programm auf der Remote-Seite ausführt.

Um beispielsweise eine Verbindung zu "+ example.com +" an Port 80 auf Ihrem Remote-Host herzustellen und die Verbindung auf Ihrem lokalen Computer an Port 8888 verfügbar zu machen, können Sie Folgendes eingeben:

ssh -f -N -L 8888:example.com:80 @

Wenn Sie jetzt Ihren lokalen Webbrowser auf "127.0.0.1: 8888 +" zeigen, sollten Sie den Inhalt von " example.com +" auf Port 80 sehen.

Eine allgemeinere Anleitung zur Syntax ist:

ssh -L :: @

Da sich die Verbindung im Hintergrund befindet, müssen Sie ihre PID finden, um sie zu beenden. Sie können dies tun, indem Sie nach dem Port suchen, den Sie weitergeleitet haben:

ps aux | grep
1001        0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -L 8888:example.com:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sie können den Prozess dann abbrechen, indem Sie die PID als Ziel angeben. Dies ist die Nummer in der zweiten Spalte der Zeile, die Ihrem SSH-Befehl entspricht:

kill

Eine andere Möglichkeit besteht darin, die Verbindung ohne das Flag + -f + zu starten. Dadurch bleibt die Verbindung im Vordergrund und Sie können das Terminalfenster nicht für die Dauer der Weiterleitung verwenden. Dies hat den Vorteil, dass Sie den Tunnel einfach durch Eingabe von "STRG-C" beenden können.

Konfigurieren des Remote-Tunnelns zu einem Server

SSH-Verbindungen können verwendet werden, um Datenverkehr von Ports auf dem lokalen Host zu Ports auf einem Remotehost zu tunneln.

In einem Remote-Tunnel wird eine Verbindung zu einem Remote-Host hergestellt. Während der Erstellung des Tunnels wird ein Remote-Port angegeben. Dieser Port auf dem Remote-Host wird dann zu einer Kombination aus Host und Port getunnelt, mit der der lokale Computer verbunden ist. Auf diese Weise kann der Remotecomputer über Ihren lokalen Computer auf einen Host zugreifen.

Dies kann nützlich sein, wenn Sie den Zugriff auf ein internes Netzwerk zulassen müssen, das für externe Verbindungen gesperrt ist. Wenn die Firewall Verbindungen außerhalb des Netzwerks zulässt, können Sie eine Verbindung zu einem Remotecomputer herstellen und den Datenverkehr von diesem Computer zu einem Speicherort im internen Netzwerk tunneln.

Um einen Remote-Tunnel zu Ihrem Remote-Server einzurichten, müssen Sie beim Herstellen der Verbindung den Parameter "+ -R +" verwenden und drei zusätzliche Informationen angeben:

  • Der Port, an dem der Remote-Host auf die getunnelte Verbindung zugreifen kann.

  • Der Host, zu dem Ihr lokaler Computer eine Verbindung herstellen soll.

  • Der Port, zu dem Ihr lokaler Computer eine Verbindung herstellen soll.

Diese werden in der obigen Reihenfolge (durch Doppelpunkte getrennt) als Argumente für das Flag "+ -R " angegeben. Wir werden auch das " -f " - Flag verwenden, das bewirkt, dass SSH vor der Ausführung in den Hintergrund tritt, und das " -N +" - Flag, das keine Shell öffnet oder ein Programm auf der Remote-Seite ausführt.

Um beispielsweise eine Verbindung zu "+ example.com +" an Port 80 auf unserem lokalen Computer herzustellen und die Verbindung auf unserem Remote-Host an Port 8888 verfügbar zu machen, können Sie Folgendes eingeben:

ssh -f -N -R 8888:example.com:80 @

Wenn Sie nun auf dem Remote-Host einen Webbrowser mit der Nummer "127.0.0.1: 8888 +" öffnen, können Sie den Inhalt von " example.com +" auf Port 80 anzeigen.

Eine allgemeinere Anleitung zur Syntax ist:

ssh -R :: @

Da sich die Verbindung im Hintergrund befindet, müssen Sie ihre PID finden, um sie zu beenden. Sie können dies tun, indem Sie nach dem Port suchen, den Sie weitergeleitet haben:

ps aux | grep
1001        0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -R 8888:example.com:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sie können den Vorgang dann abbrechen, indem Sie die PID (die Nummer in der zweiten Spalte) der Zeile ansteuern, die Ihrem SSH-Befehl entspricht:

kill

Eine andere Möglichkeit besteht darin, die Verbindung ohne das Flag + -f + zu starten. Dadurch bleibt die Verbindung im Vordergrund und Sie können das Terminalfenster nicht für die Dauer der Weiterleitung verwenden. Dies hat den Vorteil, dass Sie den Tunnel einfach durch Eingabe von "STRG-C" beenden können.

Konfigurieren des dynamischen Tunnelns zu einem Remote-Server

SSH-Verbindungen können verwendet werden, um Datenverkehr von Ports auf dem lokalen Host zu Ports auf einem Remotehost zu tunneln.

Ein dynamischer Tunnel ähnelt einem lokalen Tunnel dahingehend, dass der lokale Computer über einen Remote-Host eine Verbindung zu anderen Ressourcen herstellen kann. Ein dynamischer Tunnel gibt dazu einfach einen einzelnen lokalen Port an. Anwendungen, die diesen Port zum Tunneln nutzen möchten, müssen über das SOCKS-Protokoll kommunizieren können, damit die Pakete auf der anderen Seite des Tunnels korrekt umgeleitet werden können.

Datenverkehr, der an diesen lokalen Port weitergeleitet wird, wird an den Remote-Host gesendet. Von dort wird das SOCKS-Protokoll interpretiert, um eine Verbindung zum gewünschten Endpunkt herzustellen. Diese Konfiguration ermöglicht es einer SOCKS-fähigen Anwendung, über den Remote-Server eine Verbindung zu einer beliebigen Anzahl von Standorten herzustellen, ohne dass mehrere statische Tunnel erforderlich sind.

Um die Verbindung herzustellen, übergeben wir die Markierung "+ -D " zusammen mit dem lokalen Port, an dem wir auf den Tunnel zugreifen möchten. Wir werden auch das " -f " - Flag verwenden, das bewirkt, dass SSH vor der Ausführung in den Hintergrund tritt, und das " -N +" - Flag, das keine Shell öffnet oder ein Programm auf der Remote-Seite ausführt.

Um beispielsweise einen Tunnel an Port 7777 einzurichten, können Sie Folgendes eingeben:

ssh -f -N -D  @

Von hier aus können Sie Ihre SOCKS-fähige Anwendung (wie einen Webbrowser) auf den von Ihnen ausgewählten Port richten. Die Anwendung sendet ihre Informationen an einen Socket, der dem Port zugeordnet ist.

Die Methode zum Weiterleiten des Datenverkehrs an den SOCKS-Port unterscheidet sich je nach Anwendung. In Firefox lautet der allgemeine Speicherort beispielsweise "Einstellungen"> "Erweitert"> "Einstellungen"> "Manuelle Proxy-Konfigurationen". In Chrome können Sie die Anwendung mit gesetztem + - Proxy-Server = + Flag starten. Sie möchten die localhost-Schnittstelle und den Port verwenden, den Sie weitergeleitet haben.

Da sich die Verbindung im Hintergrund befindet, müssen Sie ihre PID finden, um sie zu beenden. Sie können dies tun, indem Sie nach dem Port suchen, den Sie weitergeleitet haben:

ps aux | grep
1001        0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -D 7777 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sie können den Vorgang dann abbrechen, indem Sie die PID (die Nummer in der zweiten Spalte) der Zeile ansteuern, die Ihrem SSH-Befehl entspricht:

kill

Eine andere Möglichkeit besteht darin, die Verbindung ohne das Flag + -f + zu starten. Dadurch bleibt die Verbindung im Vordergrund und Sie können das Terminalfenster nicht für die Dauer der Weiterleitung verwenden. Dies hat den Vorteil, dass Sie den Tunnel einfach durch Eingabe von "STRG-C" beenden können.

Verwenden von SSH-Escape-Codes zur Steuerung von Verbindungen

Auch nach dem Aufbau einer SSH-Sitzung kann die Verbindung vom Terminal aus gesteuert werden. Wir können dies mit sogenannten SSH-Escape-Codes tun, mit denen wir innerhalb einer Sitzung mit unserer lokalen SSH-Software interagieren können.

Client-seitiges Trennen erzwingen (Beenden einer blockierten oder eingefrorenen Sitzung)

Eine der nützlichsten Funktionen von OpenSSH, die weitgehend unbemerkt bleiben, ist die Möglichkeit, bestimmte Aspekte der Sitzung von innen zu steuern.

Diese Befehle können ab dem Steuerzeichen "+ ~ +" in einer SSH-Sitzung ausgeführt werden. Steuerbefehle werden nur interpretiert, wenn sie das erste sind, das nach einer neuen Zeile eingegeben wird. Drücken Sie daher immer ein oder zwei Mal die EINGABETASTE, bevor Sie eine Zeile verwenden.

Eine der nützlichsten Steuerungen ist die Möglichkeit, eine Trennung vom Client zu initiieren. SSH-Verbindungen werden normalerweise vom Server geschlossen. Dies kann jedoch ein Problem sein, wenn der Server unter Problemen leidet oder die Verbindung unterbrochen wurde. Durch die Verwendung einer clientseitigen Trennung kann die Verbindung sauber vom Client getrennt werden.

Verwenden Sie das Steuerzeichen (+ ~ +) mit einem Punkt, um eine Verbindung vom Client zu trennen. Wenn Ihre Verbindung Probleme hat, befinden Sie sich wahrscheinlich in einer Terminalsitzung, die nicht mehr funktioniert. Geben Sie die Befehle trotz fehlenden Feedbacks ein, um eine clientseitige Trennung durchzuführen:

[ENTER]
~.

Die Verbindung sollte sofort getrennt werden und Sie zu Ihrer lokalen Shell-Sitzung zurückkehren.

Eine SSH-Sitzung in den Hintergrund stellen

Eine der nützlichsten Funktionen von OpenSSH, die weitgehend unbemerkt bleiben, ist die Möglichkeit, bestimmte Aspekte der Sitzung über die Verbindung zu steuern.

Diese Befehle können beginnend mit dem Steuerzeichen "+ ~ +" innerhalb einer SSH-Verbindung ausgeführt werden. Steuerbefehle werden nur interpretiert, wenn sie das erste sind, das nach einer neuen Zeile eingegeben wird. Drücken Sie daher immer ein oder zwei Mal die EINGABETASTE, bevor Sie eine Zeile verwenden.

Dies bietet unter anderem die Möglichkeit, eine SSH-Sitzung in den Hintergrund zu stellen. Dazu müssen wir das Steuerzeichen (~) eingeben und dann die herkömmliche Tastenkombination ausführen, um eine Aufgabe im Hintergrund auszuführen (STRG-z):

[ENTER]
~[CTRL-z]

Dadurch wird die Verbindung in den Hintergrund gestellt und Sie kehren zu Ihrer lokalen Shell-Sitzung zurück. Um zu Ihrer SSH-Sitzung zurückzukehren, können Sie die herkömmlichen Jobsteuerungsmechanismen verwenden.

Sie können Ihre letzte Hintergrundaufgabe sofort wieder aktivieren, indem Sie Folgendes eingeben:

fg

Wenn Sie mehrere Hintergrundaufgaben haben, können Sie die verfügbaren Jobs anzeigen, indem Sie Folgendes eingeben:

jobs
[1]+  Stopped                 ssh @
[2]   Stopped                 ssh @

Sie können dann eine der Aufgaben in den Vordergrund stellen, indem Sie den Index in der ersten Spalte mit einem Prozentzeichen verwenden:

fg %2

Ändern der Portweiterleitungsoptionen für eine vorhandene SSH-Verbindung

Eine der nützlichsten Funktionen von OpenSSH, die weitgehend unbemerkt bleiben, ist die Möglichkeit, bestimmte Aspekte der Sitzung über die Verbindung zu steuern.

Diese Befehle können beginnend mit dem Steuerzeichen "+ ~ +" innerhalb einer SSH-Verbindung ausgeführt werden. Steuerbefehle werden nur interpretiert, wenn sie das erste sind, das nach einer neuen Zeile eingegeben wird. Drücken Sie daher immer ein oder zwei Mal die EINGABETASTE, bevor Sie eine Zeile verwenden.

Dies ermöglicht es einem Benutzer, die Konfiguration der Portweiterleitung zu ändern, nachdem die Verbindung bereits hergestellt wurde. Auf diese Weise können Sie sofort Regeln für die Portweiterleitung erstellen oder auflösen.

Diese Funktionen sind Teil der SSH-Befehlszeilenschnittstelle, auf die während einer Sitzung mit den Steuerzeichen ("+ ~ +") und "C" zugegriffen werden kann:

[ENTER]
~C
ssh>

Sie erhalten eine SSH-Eingabeaufforderung mit einer sehr begrenzten Anzahl gültiger Befehle. Um die verfügbaren Optionen anzuzeigen, können Sie an dieser Eingabeaufforderung "+ -h " eingeben. Wenn nichts zurückgegeben wird, müssen Sie möglicherweise die Ausführlichkeit Ihrer SSH-Ausgabe erhöhen, indem Sie ` ~ v +` einige Male verwenden:

[ENTER]
~v
~v
~v
~C
-h
Commands:
     -L[bind_address:]port:host:hostport    Request local forward
     -R[bind_address:]port:host:hostport    Request remote forward
     -D[bind_address:]port                  Request dynamic forward
     -KL[bind_address:]port                 Cancel local forward
     -KR[bind_address:]port                 Cancel remote forward
     -KD[bind_address:]port                 Cancel dynamic forward

Wie Sie sehen, können Sie alle Weiterleitungsoptionen mit den entsprechenden Optionen problemlos implementieren (weitere Informationen finden Sie im Abschnitt Weiterleitung). Sie können einen Tunnel auch mit dem zugehörigen Befehl "kill" zerstören, der mit einem "K" vor dem Weiterleitungstyp "letter" angegeben ist. Um beispielsweise eine lokale Weiterleitung zu beenden ("+ -L "), können Sie den Befehl " -KL +" verwenden. Sie müssen hierfür nur den Port angeben.

Um also eine lokale Portweiterleitung einzurichten, können Sie Folgendes eingeben:

[ENTER]
~C
-L 8888:127.0.0.1:80

Port 8888 auf Ihrem lokalen Computer kann jetzt mit dem Webserver auf dem Host kommunizieren, zu dem Sie eine Verbindung herstellen. Wenn Sie fertig sind, können Sie das nach vorne abreißen, indem Sie Folgendes eingeben:

[ENTER]
~C
-KL 8888

Fazit

Die obigen Anweisungen sollten den Großteil der Informationen abdecken, die die meisten Benutzer täglich zu SSH benötigen. Wenn Sie weitere Tipps haben oder Ihre bevorzugten Konfigurationen und Methoden mitteilen möchten, können Sie die folgenden Kommentare verwenden.