GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden der SSH-Konfigurationsdatei

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ährend 192.168.0.* stimmt mit Hosts in 192.168.0.0/24 überein Subnetz.
  • ? - Entspricht genau einem Zeichen. Das Muster, Host 10.10.0.? stimmt mit allen Hosts in 10.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 in 10.10.0.0/24 überein Subnetz außer 10.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:

~/.ssh/config
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, die Host targaryen ist . Dann überprüft es die nächsten Strophen eine nach der anderen auf ein passendes Muster. Der nächste passende ist Host * !martell (d. h. alle Hosts außer martell ), und es wird die Verbindungsoption aus dieser Strophe angewendet. Die letzte Definition Host * passt auch, aber der ssh-Client nimmt nur die Compression Option, da der User Option ist bereits im Host 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 und Host * . 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 und Host * . 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 und Host * Abschnitte.

SSH-Konfigurationsdateioption # überschreiben

Der ssh-Client liest seine Konfiguration in der folgenden Rangfolge:

  1. Über die Befehlszeile angegebene Optionen.
  2. Optionen definiert in ~/.ssh/config .
  3. 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.


Linux
  1. Meine ASP.NET-Site scheint die falsche Web.config-Datei zu verwenden

  2. Wie lade ich eine Datei mit SSH vom Server herunter?

  3. So ändern Sie die Konfiguration von u-boot in Yocto

  4. Wie kann man ssh dazu bringen, sich als der richtige Benutzer anzumelden?

  5. Entfernen Sie eine Datei unter Linux mithilfe der Inode-Nummer

Die Bash‘?

Ist Mv Atomic auf den Fs?

Der Zweck der Verwendung eines Fifo im Vergleich zu einer temporären Datei oder einer Pipe?

Ssh – Die Sshd-Protokolle?

Wie richte ich die ssh-schlüsselbasierte Authentifizierung für Github mithilfe der Datei ~/.ssh/config ein?

Wie lade ich eine Datei mit dem cPanel-Dateimanager hoch?