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.5
stimmt 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 targaryen
eingeben , liest der ssh-Client die Datei und wendet die Optionen aus der ersten Übereinstimmung an, dieHost targaryen
ist . 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 dieCompression
Option, da derUser
Option ist bereits imHost targaryen
definiert Strophe.Die vollständige Liste der Optionen, die verwendet werden, wenn Sie
ssh targaryen
eingeben 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 tyrell
die übereinstimmenden Hostmuster sind:Host tyrell
,Host *ell
,Host * !martell
undHost *
. Die in diesem Fall verwendeten Optionen sind:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
Wenn Sie
ssh martell
ausführen , die übereinstimmenden Hostmuster sind:Host martell
,Host *ell
undHost *
. 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 * !martell
angegebenen 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.