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

Einführung

SSH ist ein sicheres Protokoll, das als primäres Mittel zum Verbinden mit Linux-Servern verwendet wird. Es bietet eine textbasierte Schnittstelle, indem es eine entfernte Shell startet. Nach der Verbindung werden alle von Ihnen in Ihrem lokalen Terminal eingegebenen Befehle an den entfernten Server gesendet und dort ausgeführt.

In diesem Spickzettel-Stil Leitfaden werden einige gängige Methoden zur Verbindung mit SSH behandelt, um Ihre Ziele zu erreichen. Dies kann als schnelle Referenz verwendet werden, wenn Sie wissen müssen, wie Sie sich auf Ihrem Server verbinden oder diesen auf unterschiedliche Weise konfigurieren können.

Bereitstellen Sie Ihre Frontend-Anwendungen von GitHub aus mit dem DigitalOcean App Platform. Lassen Sie DigitalOcean Ihre App skalieren.

So verwenden Sie diesen Leitfaden

  • Lesen Sie zuerst den SSH-Überblicksabschnitt, wenn Sie mit SSH im Allgemeinen nicht vertraut sind oder gerade erst anfangen.
  • Verwenden Sie die darauf folgenden Abschnitte, die für das relevant sind, was Sie erreichen möchten. Die meisten Abschnitte basieren nicht auf anderen, sodass Sie die folgenden Beispiele unabhängig voneinander verwenden können.
  • Verwenden Sie das Inhaltsverzeichnis auf der linken Seite dieser Seite (bei breiten Bildschirmbreiten) oder die Suchfunktion Ihres Browsers, um die benötigten Abschnitte zu finden.
  • Kopieren Sie die Befehlsbeispiele, die angegeben sind, und ersetzen Sie die hervorgehobenen Werte durch Ihre eigenen Werte.

SSH-Überblick

Der häufigste Weg, um eine Verbindung zu einem entfernten Linux-Server herzustellen, erfolgt über 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 entfernten Server existiert.

Wie SSH funktioniert

Wenn Sie über SSH eine Verbindung herstellen, werden Sie in eine Shell-Sitzung versetzt, die eine textbasierte Oberfläche ist, über die Sie mit Ihrem Server interagieren können. Während Ihrer SSH-Sitzung werden alle Befehle, die Sie in Ihr lokales Terminal eingeben, durch einen verschlüsselten SSH-Tunnel gesendet und auf Ihrem Server ausgeführt.

Die SSH-Verbindung wird mithilfe eines Client-Server-Modells implementiert. Das bedeutet, dass für eine SSH-Verbindung, die hergestellt werden soll, die entfernte Maschine eine Software namens SSH-Daemon ausführen muss. Diese Software lauscht auf Verbindungen an einem bestimmten Netzwerkport, authentifiziert Verbindungsanfragen und startet die entsprechende Umgebung, wenn der Benutzer die richtigen Anmeldeinformationen bereitstellt.

Der Computer des Benutzers muss einen SSH-Client haben. Dies ist eine Software, die weiß, wie man mithilfe des SSH-Protokolls kommuniziert, und der Informationen über den entfernten Host, zu dem eine Verbindung hergestellt werden soll, den Benutzernamen, der verwendet werden soll, und die Anmeldeinformationen, die zur Authentifizierung übergeben werden sollen, gegeben werden können. Der Client kann auch bestimmte Details über den Verbindungstyp angeben, den er herstellen möchte.

Wie SSH-Benutzer authentifiziert werden

Benutzer authentifizieren sich in der Regel entweder mithilfe von Passwörtern (weniger sicher und nicht empfohlen) oder SSH-Schlüsseln, die sehr sicher sind.

Passwort-Logins sind verschlüsselt und für neue Benutzer leicht verständlich. Allerdings versuchen automatisierte Bots und bösartige Benutzer oft wiederholt, sich bei Konten anzumelden, die passwortbasierte Logins ermöglichen, was zu Sicherheitskompromissen 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 passendes Paar kryptografischer Schlüssel, die zur Authentifizierung verwendet werden können. Jedes Set enthält einen öffentlichen und einen privaten Schlüssel. Der öffentliche Schlüssel kann bedenkenlos frei geteilt werden, während der private Schlüssel sorgfältig geschützt und niemals jemandem offenbart werden darf.

Um sich mit SSH-Schlüsseln zu authentifizieren, muss ein Benutzer ein SSH-Schlüsselpaar auf seinem lokalen Computer haben. Auf dem entfernten Server muss der öffentliche Schlüssel in eine Datei im Benutzerverzeichnis unter ~/.ssh/authorized_keys kopiert werden. Diese Datei enthält eine Liste von öffentlichen Schlüsseln, jeweils einer 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, welchen öffentlichen Schlüssel er verwenden soll. Der Server überprüft dann seine authorized_keys-Datei auf den öffentlichen Schlüssel, generiert eine Zufallszeichenfolge 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 dieser tatsächlich über den zugehörigen privaten Schlüssel verfügt.

Nach Erhalt dieser Nachricht entschlüsselt der Client sie mithilfe des privaten Schlüssels und kombiniert die aufgedeckte Zufallszeichenfolge mit einer zuvor vereinbarten Sitzungs-ID. Anschließend generiert er einen MD5-Hash dieses Werts und überträgt ihn zurück an den Server. Der Server hatte bereits die originale Nachricht und die Sitzungs-ID, sodass er einen MD5-Hash vergleichen kann, der von diesen Werten generiert wurde, und feststellen kann, dass der Client den privaten Schlüssel haben muss.

Jetzt, da Sie wissen, wie SSH funktioniert, können wir damit beginnen, einige Beispiele zu diskutieren, um verschiedene Möglichkeiten der Arbeit mit SSH zu demonstrieren.

Generierung und Arbeit 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 Server verteilt wird, auf denen sie verwendet werden sollen. Dies ist ein guter Abschnitt, um zu beginnen, wenn Sie zuvor noch keine Schlüssel generiert haben, da dies die zukünftigen Verbindungen sicherer macht.

Generieren eines SSH-Schlüsselpaars

Das Generieren eines neuen öffentlichen und privaten SSH-Schlüsselpaars auf Ihrem lokalen Computer ist der erste Schritt, um sich bei einem entfernten Server ohne Passwort zu authentifizieren. Es sei denn, es gibt einen guten Grund dafür, sollten Sie sich immer mit SSH-Schlüsseln authentifizieren.

A number of cryptographic algorithms can be used to generate SSH keys, including RSA, DSA, and ECDSA. RSA keys are generally preferred and are the default key type.

Um ein RSA-Schlüsselpaar auf Ihrem lokalen Computer zu generieren, geben Sie ein:

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

Diese Aufforderung ermöglicht es Ihnen, den Speicherort für Ihren RSA-Privatschlüssel auszuwählen. Drücken Sie ENTER, um dies als Standard zu belassen, was sie im versteckten Verzeichnis .ssh im Benutzerverzeichnis speichert. Wenn Sie den Standardort belassen, kann Ihr SSH-Client die Schlüssel automatisch finden.

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

Die nächste Aufforderung ermöglicht es Ihnen, eine Passphrase beliebiger Länge einzugeben, um Ihren privaten Schlüssel zu sichern. Standardmäßig müssen Sie jedes Mal, wenn Sie den privaten Schlüssel verwenden, die hier festgelegte Passphrase eingeben, als zusätzliche Sicherheitsmaßnahme. Wenn Sie keine Passphrase festlegen möchten, können Sie einfach die ENTER-Taste drücken. Beachten Sie jedoch, dass dies es jedem ermöglichen würde, der die Kontrolle über Ihren privaten Schlüssel erlangt, sich auf Ihren Servern anzumelden.

Wenn Sie sich entscheiden, eine Passphrase einzugeben, wird beim Tippen nichts angezeigt. Dies ist eine Sicherheitsmaßnahme.

Output
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+ | +-----------------+

Dieses Verfahren hat ein RSA-SSH-Schlüsselpaar generiert, das sich im versteckten Verzeichnis .ssh im Benutzerverzeichnis 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 frei geteilt werden, ohne Konsequenzen zu haben.

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

SSH-Schlüssel sind standardmäßig 2048 Bits lang. Dies wird im Allgemeinen als ausreichend sicher angesehen, aber Sie können eine größere Anzahl von Bits für einen härteren Schlüssel angeben.

Um dies zu tun, geben Sie das -b-Argument mit der gewünschten Anzahl von Bits an. Die meisten Server unterstützen Schlüssel mit einer Länge von mindestens 4096 Bits. Längere Schlüssel werden möglicherweise aus Gründen des DDOS-Schutzes nicht akzeptiert:

  1. 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 nicht mehr bei Servern mit diesem Schlüssel anmelden. Aus diesem Grund sollten Sie Schlüssel mit Vorsicht überschreiben.

Entfernen oder Ändern des Passworts eines privaten Schlüssels

Wenn Sie für Ihren privaten Schlüssel ein Passwort generiert haben und es ändern oder entfernen möchten, können Sie dies leicht tun.

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

Um das Passwort zu ändern oder zu entfernen, geben Sie einfach ein:

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

Sie können den Speicherort des zu ändernden Schlüssels eingeben oder ENTER drücken, um den Standardwert zu akzeptieren:

Enter old passphrase:

Geben Sie das alte Passwort ein, das Sie ändern möchten. Sie werden dann zur Eingabe eines neuen Passworts aufgefordert:

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

Geben Sie hier Ihr neues Passwort ein oder drücken Sie ENTER, um das Passwort zu entfernen.

Anzeigen des Fingerabdrucks des SSH-Schlüssels

Jedes SSH-Schlüsselpaar teilt sich einen einzigen kryptografischen „Fingerabdruck“, der verwendet werden kann, um die Schlüssel eindeutig zu identifizieren. Dies kann in verschiedenen Situationen nützlich sein.

Um den Fingerabdruck eines SSH-Schlüssels herauszufinden, geben Sie ein:

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

Sie können die EINGABETASTE drücken, wenn dies der richtige Speicherort des Schlüssels ist, sonst geben Sie den überarbeiteten Speicherort ein. Es wird Ihnen eine Zeichenfolge gegeben, die die Bitlänge des Schlüssels, den Fingerabdruck, den Benutzer und den Host angibt, für den er erstellt wurde, sowie den verwendeten Algorithmus:

Output
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

Um Ihren öffentlichen Schlüssel auf einen Server zu kopieren und sich ohne Passwort zu authentifizieren, können verschiedene Ansätze verfolgt werden.

Wenn Sie derzeit einen passwortbasierten SSH-Zugriff auf Ihren Server konfiguriert haben und das Dienstprogramm ssh-copy-id installiert haben, ist dies ein einfacher Prozess. Das ssh-copy-id-Werkzeug ist in vielen Linux-Distributionen OpenSSH-Paketen enthalten, sodass es sehr wahrscheinlich standardmäßig installiert ist.

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

  1. ssh-copy-id username@remote_host

Dies fordert Sie zur Eingabe des Passworts für das Benutzerkonto auf dem entfernten System auf:

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 werden die Inhalte Ihres ~/.ssh/id_rsa.pub-Schlüssels am Ende der ~/.ssh/authorized_keys-Datei des Benutzerkontos angehängt:

Output
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 in dieses Konto ohne Passwort einloggen:

  1. ssh username@remote_host

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

Wenn Sie nicht über das ssh-copy-id-Dienstprogramm verfügen, aber immer noch SSH-Zugriff auf den Remote-Server mit Passwort haben, können Sie den Inhalt Ihres öffentlichen Schlüssels auf eine andere Weise kopieren.

Sie können den Inhalt des Schlüssels ausgeben und ihn in das ssh-Befehl umleiten. Auf der Remote-Seite können Sie sicherstellen, dass das ~/.ssh-Verzeichnis vorhanden ist, und dann den umgeleiteten Inhalt in die Datei ~/.ssh/authorized_keys anhängen:

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

Sie werden aufgefordert, das Passwort für das entfernte 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, sodass Sie sich ohne Passwort anmelden können:

  1. ssh username@remote_IP_host

Kopieren Ihres öffentlichen SSH-Schlüssels auf einen Server manuell

Wenn Sie keinen SSH-Zugriff mit Passwort haben, müssen Sie Ihren öffentlichen Schlüssel manuell auf dem Remote-Server hinzufügen.

Auf Ihrem lokalen Rechner können Sie den Inhalt Ihrer öffentlichen Schlüsseldatei finden, indem Sie eingeben:

  1. cat ~/.ssh/id_rsa.pub
Output
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 entfernten Server einfügen. Sie müssen sich auf anderem Wege (wie der DigitalOcean-Webkonsole) auf dem entfernten Server anmelden.

Auf dem entfernten Server erstellen Sie das Verzeichnis ~/.ssh, falls es noch nicht existiert:

  1. mkdir -p ~/.ssh

Danach können Sie die Datei ~/.ssh/authorized_keys erstellen oder anfügen, indem Sie Folgendes eingeben:

  1. echo public_key_string >> ~/.ssh/authorized_keys

Sie sollten sich jetzt ohne Passwort auf dem entfernten Server anmelden können.

Grundlegende Verbindungsinstruktionen

Im folgenden Abschnitt werden einige Grundlagen zur Verbindung mit einem Server über SSH erläutert.

Verbindung mit einem entfernten Server

Um eine Verbindung zu einem entfernten Server herzustellen und dort eine Shell-Sitzung zu öffnen, können Sie das ssh-Kommando verwenden.

Die einfachste Form geht davon aus, dass Ihr Benutzername auf Ihrem lokalen Rechner mit dem auf dem entfernten Server übereinstimmt. Wenn dies zutrifft, können Sie eine Verbindung herstellen mit:

  1. ssh remote_host

Wenn Ihr Benutzername auf dem entfernten Server anders ist, müssen Sie den Benutzernamen des entfernten Benutzers wie folgt übergeben:

  1. ssh username@remote_host

Beim ersten Mal, wenn Sie sich mit einem neuen Host verbinden, sehen Sie eine Meldung, die wie folgt aussieht:

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 ja ein, um die Authentizität des entfernten Hosts zu akzeptieren.

Wenn Sie die Passwortauthentifizierung verwenden, werden Sie hier nach dem Passwort für das entfernte Konto aufgefordert. Wenn Sie SSH-Schlüssel verwenden, werden Sie nach dem Passwortsatz Ihres privaten Schlüssels gefragt, falls vorhanden. Andernfalls werden Sie automatisch angemeldet.

Ausführung eines einzelnen Befehls auf einem Remote-Server

Um anstelle einer Shell-Sitzung einen einzelnen Befehl auf einem Remote-Server auszuführen, können Sie den Befehl nach den Verbindungsinformationen hinzufügen, so wie hier:

  1. ssh username@remote_host command_to_run

Dies verbindet sich mit dem entfernten Host, authentifiziert sich mit Ihren Anmeldeinformationen und führt den angegebenen Befehl aus. Die Verbindung wird sofort danach geschlossen.

Anmeldung bei einem Server mit einem anderen Port

Standardmäßig läuft der SSH-Daemon auf einem Server auf Port 22. Ihr SSH-Client wird davon ausgehen, dass dies der Fall ist, wenn er versucht, eine Verbindung herzustellen. Wenn Ihr SSH-Server auf einem nicht standardmäßigen Port hört (dies wird in einem späteren Abschnitt demonstriert), müssen Sie die neue Portnummer beim Verbinden mit Ihrem Client angeben.

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

  1. ssh -p port_num username@remote_host

Um zu vermeiden, dass Sie dies jedes Mal tun müssen, wenn Sie sich bei Ihrem Remote-Server anmelden, können Sie eine Konfigurationsdatei im Verzeichnis ~/.ssh innerhalb des Home-Verzeichnisses Ihres lokalen Computers erstellen oder bearbeiten.

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

  1. nano ~/.ssh/config

Hier können Sie hostspezifische Konfigurationsoptionen festlegen. Um Ihren neuen Port anzugeben, verwenden Sie ein Format wie dieses:

~/.ssh/config
Host remote_alias
    HostName remote_host
    Port port_num

Dies ermöglicht es Ihnen, sich ohne Angabe der spezifischen Portnummer auf der Befehlszeile anzumelden.

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

Wenn Sie ein Passwort für Ihren privaten SSH-Schlüssel haben, werden Sie jedes Mal aufgefordert, das Passwort einzugeben, wenn Sie es zum Verbinden mit einem Remote-Host verwenden.

Um dies zu vermeiden, können Sie einen SSH-Agenten ausführen. Dieses kleine Dienstprogramm speichert Ihren privaten Schlüssel, nachdem Sie das Passwort zum ersten Mal eingegeben haben. Er wird für die Dauer Ihrer Terminalsession verfügbar sein und es Ihnen ermöglichen, sich in Zukunft ohne erneute Eingabe des Passworts zu verbinden.

Dies ist auch wichtig, wenn Sie Ihre SSH-Anmeldeinformationen weiterleiten müssen (später gezeigt).

Um den SSH-Agenten zu starten, geben Sie Folgendes in Ihre lokale Terminalsession ein:

  1. eval $(ssh-agent)
Output
Agent pid 10891

Dies startet das Agentenprogramm und versetzt es in den Hintergrund. Jetzt müssen Sie Ihren privaten Schlüssel zum Agenten hinzufügen, damit er Ihren Schlüssel verwalten kann:

  1. 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 Ihr Passwort eingeben (falls eines festgelegt ist). Danach wird Ihre Identitätsdatei dem Agenten hinzugefügt, sodass Sie Ihren Schlüssel verwenden können, um sich anzumelden, ohne das Passwort erneut eingeben zu müssen.

Weiterleitung Ihrer SSH-Anmeldeinformationen zur Verwendung auf einem Server

Wenn Sie sich ohne Passwort von einem Server zu einem anderen Server verbinden möchten, müssen Sie Ihre SSH-Schlüsselinformationen weiterleiten. Dies ermöglicht es Ihnen, sich über den Server, mit dem Sie verbunden sind, mit einem anderen Server zu authentifizieren, unter Verwendung der Anmeldeinformationen auf Ihrem lokalen Computer.

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. Dies leitet Ihre Anmeldeinformationen für diese Sitzung an den Server weiter:

  1. ssh -A username@remote_host

Von hier aus können Sie sich auf jedem anderen Host per SSH anmelden, für den Ihr SSH-Schlüssel autorisiert ist. Sie werden sich verbinden, als ob sich Ihr privater SSH-Schlüssel auf diesem Server befände.

Serverseitige Konfigurationsoptionen

Dieser Abschnitt enthält einige gängige serverseitige Konfigurationsoptionen, die beeinflussen können, wie Ihr Server reagiert und welche Arten von Verbindungen er zulässt.

Deaktivieren der Passwortauthentifizierung

Wenn Sie SSH-Schlüssel konfiguriert, getestet und ordnungsgemäß funktionierend haben, ist es wahrscheinlich eine gute Idee, die Passwortauthentifizierung zu deaktivieren. Dies verhindert, dass sich Benutzer über SSH mit einem Passwort anmelden können.

Um dies zu tun, verbinden Sie sich mit Ihrem Remote-Server und öffnen Sie die Datei /etc/ssh/sshd_config mit Root- oder Sudo-Berechtigungen:

  1. sudo nano /etc/ssh/sshd_config

Innerhalb der Datei suchen Sie nach der Direktive PasswordAuthentication. Wenn sie auskommentiert ist, kommentieren Sie sie aus. Setzen Sie sie auf no, um Passwortanmeldungen zu deaktivieren:

/etc/ssh/sshd_config
PasswordAuthentication no

Nachdem Sie die Änderung vorgenommen haben, speichern und schließen Sie die Datei. Um die Änderungen umzusetzen, sollten Sie den SSH-Dienst neu starten.

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

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

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

Einige Administratoren schlagen vor, den Standardport zu ändern, auf dem SSH läuft. Dies kann dazu beitragen, die Anzahl der Authentifizierungsversuche zu verringern, denen Ihr Server von automatisierten Bots ausgesetzt ist.

Um den Port zu ändern, auf dem der SSH-Daemon lauscht, müssen Sie sich auf Ihrem Remote-Server anmelden. Öffnen Sie die Datei sshd_config auf dem entfernten System mit Root-Rechten, entweder indem Sie sich mit diesem Benutzer anmelden oder indem Sie sudo verwenden:

  1. sudo nano /etc/ssh/sshd_config

Sobald Sie sich drinnen befinden, können Sie den Port ändern, auf dem SSH läuft, indem Sie die Spezifikation Port 22 suchen und sie so ändern, dass der Port, den Sie verwenden möchten, reflektiert wird. Um beispielsweise den Port in 4444 zu ändern, fügen Sie Folgendes in Ihre Datei ein:

/etc/ssh/sshd_config
#Port 22
Port 4444

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

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Nach dem Neustart des Daemons müssen Sie sich authentifizieren, indem Sie die Portnummer angeben (wie bereits im vorherigen Abschnitt gezeigt).

Beschränkung der Benutzer, die sich über SSH verbinden können

Um die Benutzerkonten, die sich über SSH anmelden können, explizit zu beschränken, können Sie verschiedene Ansätze verfolgen, von denen jeder die Bearbeitung der SSH-Daemon-Konfigurationsdatei beinhaltet.

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

  1. sudo nano /etc/ssh/sshd_config

Die erste Methode zur Angabe der Konten, die sich anmelden dürfen, erfolgt über die AllowUsers-Anweisung. Suchen Sie nach der AllowUsers-Anweisung in der Datei. Wenn sie nicht existiert, erstellen Sie sie irgendwo. Geben Sie nach der Anweisung die Benutzerkonten an, die sich über SSH anmelden dürfen:

/etc/ssh/sshd_config
AllowUsers user1 user2

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

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Wenn Sie sich mit Gruppenverwaltung wohler fühlen, können Sie stattdessen die AllowGroups-Anweisung verwenden. Fügen Sie in diesem Fall einfach eine einzelne Gruppe hinzu, die SSH-Zugriff haben soll (wir werden diese Gruppe gleich erstellen und Mitglieder hinzufügen):

/etc/ssh/sshd_config
AllowGroups sshmembers

Speichern und schließen Sie die Datei.

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

  1. sudo groupadd -r sshmembers

Vergewissern Sie sich, dass Sie die erforderlichen Benutzerkonten zu dieser Gruppe hinzufügen. Dies kann durch Eingabe von Folgendem erfolgen:

  1. sudo usermod -a -G sshmembers user1
  2. sudo usermod -a -G sshmembers user2

Starten Sie nun den SSH-Dienst neu, um Ihre Änderungen zu implementieren.

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Root-Anmeldung deaktivieren

Es ist oft ratsam, die Root-Anmeldung über SSH vollständig zu deaktivieren, nachdem Sie ein SSH-Benutzerkonto eingerichtet haben, das über sudo-Berechtigungen verfügt.

Öffnen Sie hierfür die SSH-Dämonkonfigurationsdatei mit Root- oder Sudo-Berechtigungen auf Ihrem Remote-Server.

  1. sudo nano /etc/ssh/sshd_config

Innerhalb, suchen Sie nach einer Direktive namens PermitRootLogin. Wenn es auskommentiert ist, kommentieren Sie es aus. Ändern Sie den Wert auf „nein“:

/etc/ssh/sshd_config
PermitRootLogin no

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

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Zulassen von Root-Zugriff für bestimmte Befehle

Es gibt einige Fälle, in denen Sie möglicherweise den allgemeinen Root-Zugriff deaktivieren möchten, aber ihn aktivieren möchten, um bestimmte Anwendungen korrekt ausführen zu können. Ein Beispiel hierfür könnte eine Sicherungsroutine sein.

Dies kann über die Datei authorized_keys des Root-Benutzers erreicht werden, die SSH-Schlüssel enthält, die berechtigt sind, das Konto zu verwenden.

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

  1. ssh-copy-id root@remote_host

Jetzt melden Sie sich beim entfernten Server an. Wir müssen den Eintrag in der Datei authorized_keys anpassen, also öffnen Sie sie mit Root- oder Sudo-Zugriff:

  1. sudo nano /root/.ssh/authorized_keys

Am Anfang der Zeile mit dem von Ihnen hochgeladenen Schlüssel fügen Sie eine command=-Anweisung hinzu, die den Befehl definiert, für den dieser Schlüssel gültig ist. Dies sollte den vollständigen Pfad zur ausführbaren Datei sowie etwaige Argumente enthalten:

/root/.ssh/authorized_keys
command="/path/to/command arg1 arg2" ssh-rsa ...

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

Öffnen Sie nun die Datei sshd_config mit Root- oder Sudo-Berechtigungen:

  1. sudo nano /etc/ssh/sshd_config

Suchen Sie die Direktive PermitRootLogin und ändern Sie den Wert auf forced-commands-only. Dadurch wird nur zugelassen, dass SSH-Schlüssel-Anmeldungen als Root verwendet werden, wenn ein Befehl für den Schlüssel angegeben wurde:

/etc/ssh/sshd_config
PermitRootLogin forced-commands-only

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

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Weiterleitung von X-Anwendungsdisplays an den Client

Der SSH-Daemon kann so konfiguriert werden, dass er automatisch das Display von X-Anwendungen auf dem Server an den Client weiterleitet. Damit dies korrekt funktioniert, muss der Client über ein konfiguriertes und aktiviertes X-Fenstersystem verfügen.

Um diese Funktionalität zu aktivieren, melden Sie sich auf Ihrem Remote-Server an und bearbeiten Sie die Datei sshd_config als Root oder mit Sudo-Berechtigungen:

  1. sudo nano /etc/ssh/sshd_config

Suchen Sie die Direktive X11Forwarding. Wenn sie auskommentiert ist, kommentieren Sie sie aus. Erstellen Sie sie bei Bedarf und setzen Sie den Wert auf „yes“:

/etc/ssh/sshd_config
X11Forwarding yes

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

Auf Ubuntu/Debian:

  1. sudo service ssh restart

Auf CentOS/Fedora:

  1. sudo service sshd restart

Um sich mit dem Server zu verbinden und die Anzeige einer Anwendung weiterzuleiten, müssen Sie beim Verbindungsaufbau vom Client aus die Option -X übergeben:

  1. ssh -X username@remote_host

Grafische Anwendungen, die auf dem Server über diese Sitzung gestartet werden, sollten auf dem lokalen Computer angezeigt werden. Die Leistung könnte etwas langsam sein, aber es ist sehr hilfreich in der Not.

Clientseitige Konfigurationsoptionen

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

Definition von server­spezifischen Verbindungsinformationen

Auf Ihrem lokalen Computer können Sie individuelle Konfigurationen für einige oder alle Server definieren, mit denen Sie sich verbinden. Diese können in der Datei ~/.ssh/config gespeichert werden, die jedes Mal von Ihrem SSH-Client gelesen wird, wenn er aufgerufen wird.

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

  1. nano ~/.ssh/config

Im Inneren können Sie einzelne Konfigurationsoptionen definieren, indem Sie jedes mit einem Host-Schlüsselwort einführen, gefolgt von einem Alias. Darunter und eingerückt können Sie eine der Direktiven definieren, die in der ssh_config-Manpage gefunden werden:

  1. man ssh_config

Ein Beispiel für eine Konfiguration wäre:

~/.ssh/config
Host testhost
    HostName your_domain
    Port 4444
    User demo

Sie könnten dann einfach eine Verbindung zu your_domain auf Port 4444 unter Verwendung des Benutzernamens demo herstellen, indem Sie Folgendes eingeben:

  1. ssh testhost

Sie können auch Platzhalter verwenden, um mehr als einen Host anzupassen. Beachten Sie, dass spätere Übereinstimmungen frühere überschreiben können. Aus diesem Grund sollten Sie Ihre allgemeinsten Übereinstimmungen oben platzieren. Zum Beispiel könnten Sie standardmäßig alle Verbindungen so konfigurieren, dass X-Weiterleitung nicht erlaubt ist, mit einer Ausnahme für your_domain, indem Sie dies in Ihrer Datei haben:

~/.ssh/config
Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

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

Verbindungen am Leben halten, um ein Timeout zu vermeiden

Wenn Sie feststellen, dass Sie von SSH-Sitzungen getrennt werden, bevor Sie bereit sind, besteht die Möglichkeit, dass Ihre Verbindung abläuft.

Sie können Ihren Client konfigurieren, um regelmäßig ein Paket an den Server zu senden, 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. Öffnen Sie sie jetzt:

  1. nano ~/.ssh/config

Wenn es noch nicht existiert, definieren Sie oben in der Datei einen Abschnitt, der zu allen Hosts passt. Setzen Sie ServerAliveInterval auf „120“, um alle zwei Minuten ein Paket an den Server zu senden. Dies sollte ausreichen, um den Server darüber zu informieren, die Verbindung nicht zu schließen:

~/.ssh/config
Host *
    ServerAliveInterval 120

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

Host-Überprüfung deaktivieren

Standardmäßig wird jedes Mal, wenn Sie eine Verbindung zu einem neuen Server herstellen, der Fingerabdruck des Hostschlüssels des entfernten SSH-Daemons 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 Fälle erkennen können, in denen ein bösartiger Benutzer versucht, sich als der entfernte Host auszugeben.

In bestimmten Situationen möchten Sie möglicherweise diese Funktion deaktivieren. Hinweis: Dies kann ein großes Sicherheitsrisiko darstellen, stellen Sie daher 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:

  1. nano ~/.ssh/config

Wenn es noch nicht existiert, definieren Sie oben in der Datei einen Abschnitt, der zu allen Hosts passt. Setzen Sie die Direktive StrictHostKeyChecking auf no, um neue Hosts automatisch zur Datei known_hosts hinzuzufügen. Setzen Sie UserKnownHostsFile auf /dev/null, um bei neuen oder geänderten Hosts keine Warnung anzuzeigen:

~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Sie können die Überprüfung je nach Bedarf umkehren, indem Sie diese Optionen für andere Hosts umkehren. Die Standardeinstellung für StrictHostKeyChecking ist ask:

~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

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

SSH-Multiplexing ü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 zum selben Rechner herstellen, können Sie von Multiplexing profitieren.

SSH-Multiplexing verwendet dieselbe TCP-Verbindung für mehrere SSH-Sitzungen. Dies reduziert einen Teil der Arbeit, die erforderlich ist, um eine neue Sitzung herzustellen, und kann die Dinge möglicherweise beschleunigen. Die Begrenzung der Anzahl der Verbindungen kann auch aus anderen Gründen hilfreich sein.

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

Um Multiplexing zu konfigurieren, bearbeiten Sie die Konfigurationsdatei Ihres SSH-Clients auf Ihrem lokalen Rechner:

  1. nano ~/.ssh/config

Wenn Sie noch keine Platzhalter-Hostdefinition oben in der Datei haben, fügen Sie jetzt eine hinzu (als Host *). Wir werden die Werte ControlMaster, ControlPath und ControlPersist festlegen, um unsere Multiplexing-Konfiguration einzurichten.

Die ControlMaster-Option sollte auf „auto“ gesetzt werden, um bei Bedarf automatisch Multiplexing zu ermöglichen. Der ControlPath legt den Pfad zum Steuerungssocket fest. Die erste Sitzung erstellt dieses Socket, und nachfolgende Sitzungen können es finden, da es nach Benutzername, Host und Port benannt ist.

Das Setzen der Option ControlPersist auf 1 ermöglicht es, die erste Master-Verbindung im Hintergrund auszuführen. Die 1 gibt an, dass die TCP-Verbindung automatisch eine Sekunde nach dem Schließen der letzten SSH-Sitzung beendet wird:

/.ssh/config
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 tatsächlich das Verzeichnis erstellen, das wir im Steuerpfad angegeben haben:

  1. mkdir ~/.ssh/multiplex

Jetzt werden alle Sitzungen, die mit derselben Maschine hergestellt werden, versuchen, das vorhandene Socket und die TCP-Verbindung zu verwenden. Wenn die letzte Sitzung beendet ist, wird die Verbindung nach einer Sekunde abgebaut.

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

  1. ssh -S none username@remote_host

Einrichten von SSH-Tunneln

Andere Daten über einen sicheren SSH-Tunnel zu tunneln, ist eine ausgezeichnete Möglichkeit, um Einschränkungen durch eine Firewall zu umgehen. Es ist auch eine großartige Möglichkeit, sonst unverschlüsselten Netzwerkverkehr zu verschlüsseln.

Konfigurieren der lokalen Tunneling zu einem Server

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

A local connection is a way of accessing a network location from your local computer through your remote host. First, an SSH connection is established to your remote host. On the remote server, a connection is made to an external (or internal) network address provided by the user and traffic to this location is tunneled to your local computer on a specified port.

Dies wird oft verwendet, um in eine weniger eingeschränkte Netzwerkumgebung zu tunneln, indem eine Firewall umgangen wird. Eine weitere häufige Verwendung ist der Zugriff auf eine „nur localhost“-Web-Schnittstelle von einem entfernten Standort aus.

Um einen lokalen Tunnel zu Ihrem Remote-Server herzustellen, müssen Sie den Parameter -L verwenden, wenn Sie eine Verbindung herstellen, und Sie müssen drei zusätzliche Informationen angeben:

  • Den lokalen Port, auf den Sie die getunnelte Verbindung zugreifen möchten.
  • Den Host, mit dem Sie möchten, dass Ihr Remote-Host eine Verbindung herstellt.
  • Den Port, auf den Sie möchten, dass Ihr Remote-Host eine Verbindung herstellt.

Diese werden, in der obigen Reihenfolge (getrennt durch Doppelpunkte), als Argumente für die -L-Flag angegeben. Wir verwenden auch die -f-Flag, die bewirkt, dass SSH im Hintergrund ausgeführt wird, bevor es ausgeführt wird, und die -N-Flag, die keine Shell öffnet oder ein Programm auf der Remote-Seite ausführt.

Zum Beispiel, um eine Verbindung zu dein_domain auf Port 80 auf Ihrem Remote-Host herzustellen und die Verbindung auf Ihrem lokalen Rechner auf Port 8888 verfügbar zu machen, könnten Sie eingeben:

  1. ssh -f -N -L 8888:your_domain:80 username@remote_host

Wenn Sie jetzt Ihren lokalen Webbrowser auf 127.0.0.1:8888 zeigen, sollten Sie den Inhalt sehen, der unter dein_domain auf Port 80 liegt.

A more general guide to the syntax is:

  1. ssh -L your_port:site_or_IP_to_access:site_port username@host

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

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:your_domain: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 dann den Prozess beenden, indem Sie die PID anvisieren, die Nummer in der zweiten Spalte der Zeile, die Ihrem SSH-Befehl entspricht:

  1. kill 5965

Eine andere Möglichkeit besteht darin, die Verbindung ohne das -f-Flag zu starten. Dies hält die Verbindung im Vordergrund und verhindert, dass Sie das Terminalfenster während der Weiterleitung verwenden können. Der Vorteil dabei ist, dass Sie den Tunnel einfach beenden können, indem Sie CTRL-C eingeben:

Konfigurieren des Remote-Tunnelings zu einem Server

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

Bei einem Remote-Tunnel wird eine Verbindung mit einem entfernten Host hergestellt. Während der Erstellung des Tunnels wird ein entfernter Port angegeben. Dieser Port auf dem entfernten Host wird dann zu einer Host- und Port-Kombination getunnelt, die vom lokalen Computer aus verbunden ist. Dadurch kann der entfernte Computer über Ihren lokalen Computer auf einen Host zugreifen.

Dies kann nützlich sein, wenn Sie Zugriff auf ein internes Netzwerk gewähren müssen, das für externe Verbindungen gesperrt ist. Wenn die Firewall Verbindungen nach außen aus dem Netzwerk zulässt, können Sie sich mit einer entfernten Maschine verbinden und den Datenverkehr von dieser Maschine zu einem Ort im internen Netzwerk tunneln.

Um einen Remote-Tunnel zu Ihrem entfernten Server einzurichten, müssen Sie beim Verbinden den Parameter -R verwenden und drei zusätzliche Informationen bereitstellen:

  • Den Port, über den der entfernte Host auf die getunnelte Verbindung zugreifen kann.
  • Den Host, mit dem sich Ihr lokaler Computer verbinden soll.
  • Den Port, mit dem sich Ihr lokaler Computer verbinden soll.

Diese werden in der oben angegebenen Reihenfolge (durch Doppelpunkte getrennt) als Argumente für das Flag -R übergeben. Wir verwenden auch das Flag -f, das SSH dazu veranlasst, in den Hintergrund zu wechseln, bevor es ausgeführt wird, und das Flag -N, das keine Shell öffnet oder ein Programm auf der Remote-Seite ausführt.

Zum Beispiel, um eine Verbindung zu Ihr_Domain auf Port 80 auf unserem lokalen Computer herzustellen und die Verbindung auf unserem Remote-Host auf Port 8888 verfügbar zu machen, könnten Sie eingeben:

  1. ssh -f -N -R 8888:your_domain:80 username@remote_host

Jetzt ermöglicht das Öffnen eines Webbrowsers auf dem Remote-Host unter 127.0.0.1:8888 das Anzeigen des Inhalts, der sich auf Ihr_Domain auf Port 80 befindet.

A more general guide to the syntax is:

  1. ssh -R remote_port:site_or_IP_to_access:site_port username@host

Da die Verbindung im Hintergrund läuft, müssen Sie ihre PID finden, um sie zu beenden. Sie können dies tun, indem Sie nach dem weitergeleiteten Port suchen:

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

Dann können Sie den Prozess beenden, indem Sie die PID zielen, die Nummer in der zweiten Spalte, der Zeile, die Ihrem SSH-Befehl entspricht:

  1. kill 5965

Eine weitere Option besteht darin, die Verbindung ohne das -f-Flag zu starten. Dadurch bleibt die Verbindung im Vordergrund, und Sie können das Terminalfenster während der Weiterleitung nicht nutzen. Der Vorteil dabei ist, dass Sie den Tunnel einfach durch Eingabe von STRG-C beenden können.

Konfigurieren des dynamischen Tunnelings zu einem Remote-Server

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

A dynamic tunnel is similar to a local tunnel in that it allows the local computer to connect to other resources through a remote host. A dynamic tunnel does this by simply specifying a single local port. Applications that wish to take advantage of this port for tunneling must be able to communicate using the SOCKS protocol so that the packets can be correctly redirected at the other side of the tunnel.

Datenverkehr, der diesen lokalen Port passiert, wird zum entfernten Host gesendet. Von dort aus wird das SOCKS-Protokoll interpretiert, um eine Verbindung zum gewünschten Endziel herzustellen. Diese Einrichtung ermöglicht es einer SOCKS-fähigen Anwendung, sich über den Remote-Server mit beliebig vielen Orten zu verbinden, ohne mehrere statische Tunnel.

Um die Verbindung herzustellen, geben wir das -D-Flag zusammen mit dem lokalen Port an, über den wir auf den Tunnel zugreifen möchten. Wir verwenden auch das -f-Flag, das bewirkt, dass SSH im Hintergrund ausgeführt wird, bevor es ausgeführt wird, und das -N-Flag, das auf der entfernten Seite keine Shell öffnet oder ein Programm ausführt.

Zum Beispiel, um einen Tunnel auf Port 7777 herzustellen, können Sie folgendes eingeben:

  1. ssh -f -N -D 7777 username@remote_host

Von hier aus können Sie Ihre SOCKS-fähige Anwendung (wie einen Webbrowser) auf den von Ihnen ausgewählten Port verweisen lassen. Die Anwendung sendet ihre Informationen dann an einen mit dem Port verbundenen Socket.

Die Methode, den Verkehr zum SOCKS-Port zu leiten, wird je nach Anwendung unterschiedlich sein. Zum Beispiel befindet sich in Firefox der allgemeine Ort unter Einstellungen > Erweitert > Einstellungen > Manuelle Proxy-Konfigurationen. In Chrome können Sie die Anwendung mit dem --proxy-server=-Flag starten. Sie möchten die lokale Schnittstelle und den weitergeleiteten Port verwenden.

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

  1. ps aux | grep 8888
Output
1001 5965 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 dann den Prozess beenden, indem Sie die PID, die Nummer in der zweiten Spalte, der Zeile, die Ihrem SSH-Befehl entspricht, anvisieren:

  1. kill 5965

Eine andere Option besteht darin, die Verbindung ohne das -f-Flag zu starten. Dadurch bleibt die Verbindung im Vordergrund, sodass Sie das Terminalfenster während der Weiterleitung nicht verwenden können. Der Vorteil dabei ist, dass Sie den Tunnel einfach beenden können, indem Sie STRG-C eingeben.

Verwendung von SSH Escape Codes zur Steuerung von Verbindungen

Auch nachdem eine SSH-Sitzung hergestellt wurde, ist es möglich, die Verbindung von innerhalb des Terminals aus zu steuern. Dies können wir mit sogenannten SSH Escape-Codes tun, die es uns ermöglichen, mit unserer lokalen SSH-Software innerhalb einer Sitzung zu interagieren.

Auslösen einer Trennung von der Client-Seite (Wie man aus einer hängenden oder eingefrorenen Sitzung aussteigt)

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

Diese Befehle können ausgeführt werden, indem Sie das Steuerzeichen ~ innerhalb einer SSH-Sitzung eingeben. Steuerbefehle werden nur interpretiert, wenn sie das erste sind, was nach einem Zeilenumbruch eingegeben wird. Drücken Sie daher immer ein- oder zweimal die EINGABETASTE, bevor Sie einen verwenden.

Eine der nützlichsten Steuerungen ist die Möglichkeit, eine Trennung vom Client aus einzuleiten. SSH-Verbindungen werden normalerweise vom Server geschlossen, aber dies kann ein Problem sein, wenn der Server Probleme hat oder die Verbindung unterbrochen wurde. Durch Verwendung einer Trennung auf der Client-Seite kann die Verbindung sauber vom Client geschlossen werden.

Um eine Verbindung vom Client aus zu schließen, verwenden Sie das Steuerzeichen (~) mit einem Punkt. Wenn Ihre Verbindung Probleme hat, befinden Sie sich wahrscheinlich in einer scheinbar hängenden Terminal-Sitzung. Geben Sie die Befehle trotz des Mangels an Rückmeldung ein, um eine Trennung auf der Client-Seite durchzuführen:

  1. [ENTER]
  2. ~.

Die Verbindung sollte sich sofort schließen und Sie zurück zu Ihrer lokalen Shell-Sitzung bringen.

Eine SSH-Sitzung im Hintergrund platzieren

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

Diese Befehle können ausgeführt werden, indem man das Steuerzeichen ~ innerhalb einer SSH-Verbindung verwendet. Steuerbefehle werden nur interpretiert, wenn sie das erste sind, was nach einem Zeilenumbruch eingegeben wird. Drücken Sie daher immer ein oder zwei Mal die EINGABE-Taste, bevor Sie einen verwenden.

Eine Fähigkeit, die dies ermöglicht, ist das Platzieren einer SSH-Sitzung im Hintergrund. Dazu müssen wir das Steuerzeichen (~) eingeben und dann die herkömmliche Tastenkombination verwenden, um eine Aufgabe in den Hintergrund zu verschieben (STRG-z):

  1. [ENTER]
  2. ~[CTRL-z]

Dies platziert die Verbindung im Hintergrund und bringt Sie zurück zu Ihrer lokalen Shell-Sitzung. Um zur SSH-Sitzung zurückzukehren, können Sie die herkömmlichen Jobsteuerungsmechanismen verwenden.

Sie können Ihre zuletzt im Hintergrund platzierte Aufgabe sofort wieder aktivieren, indem Sie Folgendes eingeben:

  1. fg

Wenn Sie mehrere im Hintergrund platzierte Aufgaben haben, können Sie die verfügbaren Jobs anzeigen, indem Sie Folgendes eingeben:

  1. jobs
Output
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host

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

  1. fg %2

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

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

Diese Befehle können ausgeführt werden, indem man mit dem Steuerzeichen ~ innerhalb einer SSH-Verbindung beginnt. Steuerbefehle werden nur interpretiert, wenn sie das Erste sind, was nach einem Zeilenumbruch getippt wird. Drücken Sie daher immer einmal oder zweimal die EINGABETASTE, bevor Sie einen verwenden.

Eine Sache, die dies ermöglicht, ist die Möglichkeit für einen Benutzer, die Portweiterleitungs konfiguration zu ändern, nachdem die Verbindung bereits hergestellt wurde. Dies ermöglicht es Ihnen, Portweiterleitungsregeln nach Bedarf zu erstellen oder abzubauen.

Diese Funktionen sind Teil der SSH-Befehlszeilenschnittstelle, die während einer Sitzung durch Verwendung des Steuerzeichens (~) und „C“ aufgerufen werden kann:

  1. [ENTER]
  2. ~C
ssh>

Sie erhalten eine SSH-Befehlsaufforderung, die über einen sehr begrenzten Satz gültiger Befehle verfügt. Um die verfügbaren Optionen zu sehen, können Sie von dieser Aufforderung aus -h eingeben. Wenn nichts zurückgegeben wird, müssen Sie möglicherweise die Verbose-Option Ihrer SSH-Ausgabe erhöhen, indem Sie einige Male ~v verwenden:

  1. [ENTER]
  2. ~v
  3. ~v
  4. ~v
  5. ~C
  6. -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, können Sie ganz einfach eine der Weiterleitungsoptionen mithilfe der entsprechenden Optionen implementieren (siehe den Weiterleitungsbereich für weitere Informationen). Sie können auch einen Tunnel mit dem zugehörigen „kill“-Befehl zerstören, der mit einem „K“ vor dem Buchstaben des Weiterleitungstyps angegeben ist. Um beispielsweise eine lokale Weiterleitung (-L) zu beenden, könnten Sie den Befehl -KL verwenden. Sie müssen hierfür lediglich den Port angeben.

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

  1. [ENTER]
  2. ~C
  3. -L 8888:127.0.0.1:80

Der Port 8888 auf Ihrem lokalen Computer wird nun in der Lage sein, mit dem Webserver auf dem Host, zu dem Sie eine Verbindung herstellen, zu kommunizieren. Wenn Sie fertig sind, können Sie diese Weiterleitung abbauen, indem Sie Folgendes eingeben:

  1. [ENTER]
  2. ~C
  3. -KL 8888

Abschluss

Die obigen Anweisungen sollten die meisten Informationen abdecken, die die meisten Benutzer im Alltag über SSH benötigen. Wenn Sie andere Tipps haben oder Ihre Lieblingskonfigurationen und -methoden teilen möchten, können Sie gerne die Kommentare unten verwenden.

Source:
https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys