Dieser Artikel setzt unsere Linux-Artikelserie fort und behandelt viele nützliche SSH-Funktionen und Tricks zur Verbesserung Ihrer täglichen Produktivität. Unsere Visualisierungen helfen Ihnen, die Einrichtung von SSH, die Verwaltung von Konfigurationsdateien, die Authentifizierung, die Arbeit mit mehreren SSH-Schlüsseln und natürlich die lokale und Remote-Portweiterleitung von SSH zu verstehen. Werden Sie in 10 Minuten zum SSH-Master!
Was ist SSH
Secure Shell oder SSH ist ein Netzwerkprotokoll, mit dem Sie sich sicher mit einem Remote-Server verbinden und ihn über eine Konsolenschnittstelle verwalten können.
Wenn Sie eine SSH-Verbindung herstellen, startet der Server eine Shell-Sitzung für Sie. Danach können Sie die Befehle in Ihren SSH-Client eingeben und sie werden auf einem Remote-Server ausgeführt.
Systemadministratoren verwenden dieses Protokoll, um Remote-Linux-Server sicher zu verbinden und zu verwalten.
Wie funktioniert SSH
Wie jede Netzwerkanwendung verwendet SSH zwei Komponenten:
- SSH-Client ist eine Anwendung, die Sie auf dem Computer installieren, mit dem Sie eine Verbindung zum Linux-basierten Computer des Netzwerks herstellen. Der SSH-Client stellt eine verschlüsselte Verbindung zwischen Ihrem Computer und dem Remote-Server her.
- SSH-Server ist eine Serveranwendung, die auf TCP/IP-Port 22 auf die Clientverbindungen wartet. Wenn der Client die richtigen Anmeldeinformationen bereitgestellt hat, erstellt der SSH-Server eine neue Benutzersitzung und ermöglicht Ihnen, Remote-Befehle auszuführen.
SSH-Authentifizierung
Mit SSH können Sie mehrere verschiedene Authentifizierungsmethoden verwenden. Die am weitesten verbreiteten sind:
- Passwortauthentifizierung – Sie werden nach dem Benutzernamen und dem Passwort gefragt, um Zugriff auf den Remote-Host zu erhalten.
- SSH-schlüsselbasierte Authentifizierung – Sie verwenden öffentliche und private SSH-Schlüssel für die Benutzerauthentifizierung.
SSH-schlüsselbasierte Authentifizierung
Diese Authentifizierungsmethode gilt als sicherer als die Verwendung von Passwörtern. So funktioniert es:
Schlüsselbasierter SSH-Authentifizierungsalgorithmus:
- Der Client initiiert eine SSH-Verbindung.
- Der Server sendet eine zufällige Nachricht zurück.
- Der Client verschlüsselt die empfangene Nachricht mit einem privaten SSH-Schlüssel und sendet es an den Server zurück.
- Der Server entschlüsselt die Nachricht des Clients mit einem öffentlichen SSH-Schlüssel . Bei gleicher Nachricht gewährt der Server Zugriff.
Die Verwendung der Kennwortauthentifizierung in SSH ist nicht sicher. Wenn Sie immer noch die Passwortauthentifizierung verwenden, müssen Sie sie so schnell wie möglich auf SSH-schlüsselbasierte Authentifizierung ändern.
So installieren Sie einen SSH-Client
In den meisten Linux-Systemen und macOS ist der SSH-Server standardmäßig bereits installiert und steht Ihnen zur Verfügung. Wenn Sie jedoch mit Linux in Ihrer virtuellen Maschine spielen, müssen Sie es möglicherweise installieren.
Ubuntu
Für Deb-basierte Linux-Distributionen können Sie den SSH-Client mit den folgenden Befehlen installieren:
sudo apt-get update
sudo apt-get -y install openssh-client
CentOS, Fedora, RedHat
Für Yum-basierte Linux-Distributionen können Sie den SSH-Client mit den folgenden Befehlen installieren:
sudo yum -y install openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
Windows
Für das Windows-Betriebssystem wurde PuTTY zu einem de-facto-Standard-SSH-Client. Um es zu installieren, laden Sie das MSI-Installationsprogramm über den obigen Link herunter und befolgen Sie die Anweisungen unter How to Install PuTTY on Windows.
Hier ist der automatisierte Weg mit Chocolatey. Öffnen Sie die PowerShell-Konsole im „Als Administrator ausführen“-Modus) und führen Sie die folgenden Befehle aus:
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install putty -y
So installieren Sie einen SSH-Server
In den meisten Linux-Systemen und macOS ist der SSH-Client standardmäßig bereits installiert und steht Ihnen zur Verfügung. Wenn Sie jedoch mit Linux in Ihrer virtuellen Maschine spielen, müssen Sie es möglicherweise installieren.
SSH-Server – Ubuntu
Für Deb-basierte Linux-Distributionen können Sie den SSH-Client mit den folgenden Befehlen installieren:
sudo apt-get update
sudo apt-get -y install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
SSH-Server – CentOS, Fedora, RedHat
Für Yum-basierte Linux-Distributionen können Sie den SSH-Client mit den folgenden Befehlen installieren:
sudo yum -y install openssh
sudo systemctl enable sshd
sudo systemctl start sshd
SSH-Server – Windows
SSH-Server kann nicht unter Windows installiert werden. In der Windows-Welt müssen Sie Remote Desktop und WinRM verwenden, um Remote-Windows-Server zu steuern.
SSH-Schlüssel erstellen
Sobald Sie den SSH-Client haben, können Sie private und öffentliche SSH-Schlüssel erstellen, die für die SSH-schlüsselbasierte Authentifizierung verwendet werden. Um einen SSH-Schlüssel zu erstellen, führen Sie den folgenden Befehl im Terminal aus:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Dieser Befehl erstellt ein 4-KB-RSA-Schlüsselpaar:
~/.ssh/id_rsa
– Privater SSH-Schlüssel.~/.ssh/id_rsa.pub
– Öffentlicher SSH-Schlüssel.
Wichtig: Die private SSH-Schlüsseldatei darf niemals jemandem gezeigt oder gesendet werden.
SSH-schlüsselbasierte Authentifizierung einrichten
Um die schlüsselbasierte SSH-Authentifizierung auf dem Server einzurichten, müssen Sie die folgenden Schritte ausführen:
- Melden Sie sich beim Server an.
- Gehen Sie zum Home-Verzeichnis des Benutzers.
- Datei bearbeiten ~/.ssh/authorized_keys und fügen Sie den Inhalt des öffentlichen Schlüssels ein dort ablegen.
- Änderungen speichern.
~/.ssh/authorized_keys kann so viele öffentliche Schlüsseldateien enthalten, wie Sie benötigen. So können sich viele verschiedene Personen mit demselben Anmeldenamen, aber ihren privaten Schlüsseldateien mit dem Server verbinden.
So stellen Sie eine Verbindung mit SSH her
Sie können mit einem SSH-Client eine Verbindung zu einem Remote-Linux-Server herstellen, indem Sie den folgenden Befehl eingeben:
ssh remote_username@host_ip_address
Verwenden Sie verschiedene SSH-Schlüssel für verschiedene Server
Es ist eine weit verbreitete Situation, dass Sie möglicherweise verschiedene private SSH-Schlüsseldateien verwenden müssen, um auf verschiedene Server zuzugreifen. Es gibt mehrere Möglichkeiten, wie Sie dies tun können.
SSH-Key-In-Verbindungsbefehl angeben
Um einen erforderlichen privaten Schlüssel als Teil des SSH-Verbindungsbefehls anzugeben, verwenden Sie -i
Flagge:
ssh -i ~/.ssh/another_private_key remote_username@host_ip_address
Einen SSH-Agenten verwenden
Wenn Sie nicht zu viele private Schlüssel haben, können Sie einen SSH-Agenten verwenden.
SSH Agent ist ein Programm, das Ihren privaten SSH-Schlüssel in den Speicher lädt und ihn verwendet, um die SSH-Authentifizierung zu bestehen.
Linux
Starten Sie den ssh-Agenten im Hintergrund:
eval "$(ssh-agent -s)"
Verwenden Sie die folgenden Befehle, um Ihre SSH-Schlüssel zum Agenten hinzuzufügen:
ssh-add -K ~/.ssh/id_rsa
ssh-add -K ~/.ssh/another_private_key
Windows
Die PuTTY-Distribution enthält Pagent, das sich in der Taskleiste befindet und dieselbe Rolle spielt. Klicken Sie mit der rechten Maustaste auf Pagent und fügen Sie Ihren SSH-Schlüssel hinzu.
Jetzt verwendet der SSH-Client nacheinander alle geladenen privaten Schlüssel, um die Authentifizierung während der SSH-Verbindung zu bestehen.
SSH-Konfigurationsdatei
Eine weitere nützliche Methode zum Konfigurieren von SSH-Client-Parametern ist die Verwendung von ~/.ssh/config
Datei.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
Host exceptional.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/another_private_key
Im obigen Beispiel verwenden wir den Standard ~/.ssh/id_rsa
private Schlüsseldatei für alle Server, mit Ausnahme von exceptional.com
Server. Für exceptional.com
Server verwenden wir ~/.ssh/another_private_key
Datei.
SSH-Agent und Schlüsselweiterleitung
Eine weitere beliebte SSH-Funktion, die ich täglich verwende, ist die SSH-Schlüsselweiterleitung. Es ermöglicht Ihnen, Ihre lokalen SSH-Schlüssel zu verwenden, um sich mit verschiedenen Servern zu verbinden.
Sie können die SSH-Schlüsselweiterleitung während der Ausführung des SSH-Clients aktivieren, indem Sie -T
angeben Flagge:
ssh -T remote_username@host_ip_address
Sie können diese Konfiguration auch dauerhaft unter ~/.ssh/config
aktivieren Datei, indem Sie ForwardAgent yes
angeben :
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
SSH-Portweiterleitung
Mit dem SSH-Protokoll können Sie nicht nur die SSH-Agent-Kommunikation über einen sicheren SSH-Kanal weiterleiten, sondern jeglichen TCP-Datenverkehr.
Wenn Sie UDP-Datenverkehr weiterleiten müssen, verwenden Sie nc
in Kombination mit SSH.
Es gibt zwei Arten von Portweiterleitungsoptionen.
Lokale Portweiterleitung
Der beste Weg, die lokale SSH-Portweiterleitung zu erklären, ist, sich das folgende Diagramm anzusehen.
In diesem Diagramm der Jump Host Der Server hat eine private Verbindung zum Amazon RDS PostgreSQL-Server.
Der Kunde Laptop kann sich mit dem Jump Host-Server verbinden mit dem SSH-Protokoll.
Der Eigentümer des Client Laptop sucht nach einer Möglichkeit, eine Verbindung zur Amazon RDS-Instanz herzustellen .
Die lokale SSH-Portweiterleitungsfunktion ermöglicht das Binden eines Ports auf dem Client Laptop. Der Datenverkehr vom gebundenen Port wird über den Jump Host weitergeleitet Server zu einer Amazon RDS-Instanz .
Als Ergebnis müssen Sie sich vom Client aus mit der RDS-Instanz verbinden Laptop, müssen Sie pgsql
konfigurieren am Laptop, um sich mit localhost:15432
zu verbinden .
So müssen Sie eine SSH-Verbindung zum Jump Host herstellen vom Linux- oder macOS-Client Laptop:
ssh -L 127.0.0.1:15432:rds-endpoint-url:5432 ec2-user@jump_host_ip
Wenn Sie PuTTY verwenden, müssen Sie Änderungen an Verbindungen vornehmen – SSH – Tunnel bevor Sie sich mit dem Jump-Host verbinden.
Remote-Portweiterleitung
Die SSH-Remote-Portweiterleitung ist eine etwas aufregendere Funktion, die das gegenteilige Problem löst. Es ermöglicht Ihnen, den Port auf dem Remote-SSH-Server zu binden und den an diesen Port kommenden Datenverkehr an die Netzwerke hinter dem SSH-Client-Host weiterzuleiten.
Hier ist ein Beispiel.
In unserem Beispiel haben wir einen isolierten Server , der keinen Zugriff auf das Internet hat, und dem Client Laptop, mit dem wir eine Verbindung zum Jump Host herstellen .
Datenverkehr zwischen Jump Host und Isolierter Server ist nicht eingeschränkt.
Wir müssen den Isolierten Server zulassen um sich mit dem Internet zu verbinden. Wie können wir das tun?
Beispielsweise können wir einen Docker-Container mit Squid-Proxy auf dem Client-Laptop auf Port 8080 starten. Dann können wir eine Verbindung zu Jump Host herstellen mit SSH. Die Remote-Portweiterleitungsfunktion besteht darin, Port 8081
zu binden auf dem Jump Host um Traffic an den Client weiterzuleiten Laptop-Port 8080
.
Als Ergebnis wird der Isolierte Server in der Lage sein, http://jump_host_ip:8081
zu verwenden als Proxy-Server.
So aktivieren Sie die Remote-Portweiterleitung während der SSH-Verbindung unter Linux oder macOS:
ssh -R 8081:localhost:8080 ec2-user@jump_host_ip
Für PuTTY- und Windows-Hosts:
Zusammenfassung
In diesem Artikel habe ich viele nützliche SSH-Funktionen behandelt, die ich in meiner täglichen Arbeit verwende. Ich hoffe, Sie werden sie auch verwenden. Wenn etwas nicht klar ist, kontaktieren Sie mich bitte im Kommentarbereich unten. Ich helfe Ihnen gerne weiter.
Wenn Sie diesen Artikel nützlich fanden, können Sie mir gerne helfen, ihn in der Welt zu verbreiten!