Wenn Sie sich regelmäßig über SSH mit mehreren Remote-Systemen verbinden, werden Sie feststellen, dass es schwierig, wenn nicht sogar unmöglich ist, sich alle Remote-IP-Adressen, verschiedene Benutzernamen, nicht standardmäßige Ports und verschiedene Befehlszeilenoptionen zu merken.
Eine Möglichkeit wäre, einen Bash-Alias für jede entfernte Serververbindung zu erstellen. Es gibt jedoch eine andere, viel bessere und einfachere Lösung für dieses Problem. Mit OpenSSH können Sie eine Konfigurationsdatei pro Benutzer einrichten, in der Sie verschiedene SSH-Optionen für jeden Remote-Computer speichern können, mit dem Sie sich verbinden.
Dieser Artikel behandelt die Grundlagen der SSH-Client-Konfigurationsdatei und erläutert einige der häufigsten Konfigurationsoptionen.
Voraussetzungen #
Wir gehen davon aus, dass Sie ein Linux- oder macOS-System mit installiertem OpenSSH-Client verwenden.
Speicherort der SSH-Konfigurationsdatei #
Die clientseitige OpenSSH-Konfigurationsdatei heißt config , und es wird in .ssh gespeichert Verzeichnis unter dem Home-Verzeichnis des Benutzers.
Der ~/.ssh Verzeichnis wird automatisch erstellt, wenn der Benutzer ssh ausführt Befehl zum ersten Mal. Wenn das Verzeichnis auf Ihrem System nicht vorhanden ist, erstellen Sie es mit dem folgenden Befehl:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
Standardmäßig ist die SSH-Konfigurationsdatei möglicherweise nicht vorhanden, sodass Sie sie möglicherweise mit touch erstellen müssen Befehl:
touch ~/.ssh/config Diese Datei muss nur für den Benutzer les- und schreibbar sein und darf nicht für andere zugänglich sein:
chmod 600 ~/.ssh/config Struktur und Muster der SSH-Konfigurationsdatei #
Die SSH-Konfigurationsdatei hat die folgende Struktur:
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
Der Inhalt der SSH-Client-Konfigurationsdatei ist in Zeilengruppen (Abschnitte) organisiert. Jede Strophe beginnt mit dem Host Direktive und enthält spezifische SSH-Optionen, die beim Herstellen einer Verbindung mit dem entfernten SSH-Server verwendet werden.
Eine Einrückung ist nicht erforderlich, wird aber empfohlen, da sie die Lesbarkeit der Datei erleichtert.
Der Host Direktive kann ein Muster oder eine durch Leerzeichen getrennte Liste von Mustern enthalten. Jedes Muster kann null oder mehr Nicht-Leerzeichen oder einen der folgenden Musterbezeichner enthalten:
*- Stimmt mit null oder mehr Zeichen überein. Beispiel:Host *passt auf alle Hosts, während192.168.0.*stimmt mit Hosts in192.168.0.0/24überein Subnetz.?- Entspricht genau einem Zeichen. Das Muster,Host 10.10.0.?stimmt mit allen Hosts in10.10.0.[0-9]überein Bereich.!- Wenn es am Anfang eines Musters verwendet wird, negiert es die Übereinstimmung. Beispiel:Host 10.10.0.* !10.10.0.5stimmt mit jedem Host in10.10.0.0/24überein Subnetz außer10.10.0.5.
Der SSH-Client liest die Konfigurationsdatei Zeile für Zeile, und wenn mehr als ein Muster übereinstimmt, haben die Optionen der ersten übereinstimmenden Zeile Vorrang. Daher sollten mehr Host-spezifische Deklarationen am Anfang der Datei und allgemeinere Überschreibungen am Ende der Datei angegeben werden.
Sie können eine vollständige Liste der verfügbaren ssh-Optionen finden, indem Sie man ssh_config eingeben in Ihrem Terminal oder besuchen Sie die Manpage ssh_config.
Die SSH-Konfigurationsdatei wird auch von anderen Programmen wie scp gelesen , sftp , und rsync .
Beispiel für eine SSH-Konfigurationsdatei #
Nachdem wir nun die Grundlagen der SSH-Konfigurationsdatei behandelt haben, schauen wir uns das folgende Beispiel an.
Wenn Sie sich über SSH mit einem Remote-Server verbinden, geben Sie normalerweise den Remote-Benutzernamen, den Hostnamen und den Port an. Zum Beispiel, um sich als Benutzer namens john anzumelden zu einem Host namens dev.example.com auf Port 2322 In der Befehlszeile würden Sie Folgendes eingeben:
ssh [email protected] -p 2322
Um sich mit den gleichen Optionen wie im obigen Befehl mit dem Server zu verbinden, geben Sie einfach ssh dev ein , fügen Sie die folgenden Zeilen in Ihre "~/.ssh/config ein Datei:
Host dev
HostName dev.example.com
User john
Port 2322
Wenn Sie jetzt ssh dev eingeben , liest der ssh-Client die Konfigurationsdatei und verwendet die Verbindungsdetails, die für dev angegeben sind Host:
ssh dev Beispiel für freigegebene SSH-Konfigurationsdatei #
Dieses Beispiel gibt detailliertere Informationen über die Host-Muster und die Priorität der Optionen.
Nehmen wir die folgende Beispieldatei:
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host * !martell
LogLevel INFO
Host *
User root
Compression yes
-
Wenn Sie
ssh targaryeneingeben , liest der ssh-Client die Datei und wendet die Optionen aus der ersten Übereinstimmung an, dieHost targaryenist . Dann überprüft es die nächsten Strophen eine nach der anderen auf ein passendes Muster. Der nächste passende istHost * !martell(d. h. alle Hosts außermartell), und es wird die Verbindungsoption aus dieser Strophe angewendet. Die letzte DefinitionHost *passt auch, aber der ssh-Client nimmt nur dieCompressionOption, da derUserOption ist bereits imHost targaryendefiniert Strophe.Die vollständige Liste der Optionen, die verwendet werden, wenn Sie
ssh targaryeneingeben lautet wie folgt:HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes -
Beim Ausführen von
ssh tyrelldie übereinstimmenden Hostmuster sind:Host tyrell,Host *ell,Host * !martellundHost *. Die in diesem Fall verwendeten Optionen sind:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes -
Wenn Sie
ssh martellausführen , die übereinstimmenden Hostmuster sind:Host martell,Host *ellundHost *. Die in diesem Fall verwendeten Optionen sind:HostName 192.168.10.50 User oberyn Compression yes -
Für alle anderen Verbindungen verwendet der ssh-Client die in
Host * !martellangegebenen Optionen undHost *Abschnitte.
SSH-Konfigurationsdateioption # überschreiben
Der ssh-Client liest seine Konfiguration in der folgenden Rangfolge:
- Über die Befehlszeile angegebene Optionen.
- Optionen definiert in
~/.ssh/config. - Optionen definiert in
/etc/ssh/ssh_config.
Wenn Sie eine einzelne Option überschreiben möchten, können Sie sie in der Befehlszeile angeben. Wenn Sie beispielsweise die folgende Definition haben:
Host dev
HostName dev.example.com
User john
Port 2322
und Sie alle anderen Optionen verwenden möchten, außer sich als Benutzer root zu verbinden statt john Geben Sie einfach den Benutzer in der Befehlszeile an:
ssh -o "User=root" dev
Das -F (configfile )-Option können Sie eine alternative Konfigurationsdatei pro Benutzer angeben.
Um es dem ssh mitzuteilen Um alle in der ssh-Konfigurationsdatei angegebenen Optionen zu ignorieren, verwenden Sie:
ssh -F /dev/null [email protected] Schlussfolgerung #
Wir haben Ihnen gezeigt, wie Sie Ihre Benutzer-SSH-Konfigurationsdatei konfigurieren. Sie können auch eine auf SSH-Schlüsseln basierende Authentifizierung einrichten und sich mit Ihren Linux-Servern verbinden, ohne ein Passwort einzugeben.
Standardmäßig überwacht SSH Port 22. Das Ändern des standardmäßigen SSH-Ports fügt Ihrem Server eine zusätzliche Sicherheitsebene hinzu, indem das Risiko automatisierter Angriffe verringert wird.
Wenn Sie Fragen haben, hinterlassen Sie bitte unten einen Kommentar.