Blogbeitrag über interessante und gebräuchliche SSH-Befehle, Tipps, Tricks und Hacks für Linux-Administratoren, die zur Unterstützung oder Automatisierung täglicher Aufgaben verwendet werden können.
Dieser Blogpost wurde von einer Maschine aus dem Englischen übersetzt. Die Originalversion finden Sie hier: Interesting and common SSH commands, tips, tricks and hacks
Bitte kontaktieren Sie uns , wenn etwas unklar beschrieben ist, nicht funktioniert, falsch erscheint oder wenn Sie Unterstützung benötigen.
Das Argument -L für den ssh-Befehl ermöglicht die Weiterleitung von Ports. Verbindungen zu einem gegebenen TCP-Port auf dem lokalen (Client-)Host werden an den gegebenen Host und Port auf der entfernten Seite weitergeleitet.
Relevante Abschnitte aus der ssh-Manualseite:
user@debian:~$ man ssh
-L [bind_address:]port:host:hostport
Specifies that connections to the given TCP port or Unix socket on the local (client) host are to be forwarded to the given host and port, or Unix socket, on the remote side.
The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.
Beim Weiterleiten von Ports mit SSH ist es gute Praxis, die Option -N zu übergeben, um keinen Befehl auszuführen, sondern nur die Sitzung offen zu halten. Aus man ssh:
-N Do not execute a remote command. This is useful for just forwarding ports.
Als praktisches Beispiel nehmen wir an, Sie möchten auf einen Datenbankserver zugreifen, der keine öffentliche IP-Adresse hat. Sie haben jedoch Zugriff auf einen anderen Server mit einer öffentlichen IP, der Zugriff auf den besagten Datenbankserver hat. Der folgende Befehl leitet den gesamten Datenverkehr, der an 127.0.0.1:3456 gesendet wird, über public-server-ip an database-server-internal-ip:3306 weiter:
# [bind_address:]port:host:hostport
ssh -L 3456:database-server-internal-ip:3306 -N user@public-server-ip
Wenn Sie nun mit einem Datenbankclient auf 127.0.0.1:3456 Ihrer Workstation zugreifen, können Sie über den Server mit der öffentlichen IP auf den Datenbankserver in dessen internem Netzwerk zugreifen.
Das Argument -R für den ssh-Befehl ermöglicht die Weiterleitung von Ports von einem entfernten Server an die lokale Workstation.
Relevante Abschnitte aus der ssh-Manualseite:
user@debian:~$ man ssh
-R [bind_address:]port:host:hostport
Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side.
An empty bind_address, or the address ‘*’, indicates that the remote socket should listen on all interfaces. Specifying a remote bind_address will only succeed if the server's GatewayPorts option is enabled (see sshd_config(5)).
Beim Weiterleiten von Ports mit SSH ist es gute Praxis, die Option -N zu übergeben, um keinen Befehl auszuführen, sondern nur die Sitzung offen zu halten. Aus man ssh:
-N Do not execute a remote command. This is useful for just forwarding ports.
Als praktisches Beispiel leiten wir den gesamten HTTP-Verkehr auf TCP-Port 80 von einem öffentlichen Server an unsere lokale Workstation weiter:
# -R [bind_address:]port:host:hostport
ssh -R 80:127.0.0.1:8080 -N root@public-server-ip
Nun gelangt der gesamte HTTP-Verkehr, der diesen Server erreicht, zu Port 8080 Ihrer lokalen Workstation.
SSH kann verwendet werden, um Ein- und Ausgaben des dd-Befehls zu pipen. Um einen Snapshot (oder Festplatten-Image .img) einer Gerätedatei von einem entfernten Server zu erstellen, führen Sie diesen Befehl aus:
ssh root@remote-server "dd if=/dev/sda" | dd of=remote-server-disk-sda.img status=progress
Beim Entschlüsseln einer mit cryptsetup luks verschlüsselten Festplatte auf einem entfernten Server ist es am besten, die Verschlüsselungs-Keyfile nicht im Dateisystem des entfernten Hosts zu speichern. SSH kann die Daten als Stream empfangen:
cat secret-disk-keyfile.img | ssh root@server "cryptsetup luksOpen /dev/sda3 secret_disk --key-file=-"
Das SSHFS-Tool ermöglicht es Ihnen, entfernte Verzeichnisse auf Ihrer lokalen Workstation zu mounten, ähnlich wie NFS, das Network File System. SSHFS ist standardmäßig nicht auf den meisten Debian-basierten Betriebssystemen installiert.
user@workstation:~$ sudo apt install sshfs
Aus der sshfs-Manualseite:
user@workstation:~$ man sshfs
sshfs [user@]host:[dir] mountpoint [options]
Verwenden Sie diesen Befehl, um ein Verzeichnis eines entfernten Servers auf Ihrer lokalen Workstation zu mounten:
user@workstation:~$ mkdir remote-www
user@workstation:~$ sshfs user@remote-server:/var/www remote-www/
Es ist möglich, ein Shell-Skript auf einem entfernten Server auszuführen, ohne es zuerst per scp hochzuladen.
user@workstation:~$ cat myscript.sh
#!/bin/bash
set -x
whoami
hostname
Um das Skript auf dem entfernten Server auszuführen, pipen Sie das Skript einfach zu ssh’s stdin:
user@workstation:~$ cat myscript.sh | ssh user@remote-server
+ whoami
user
+ hostname
remote-server
Suchen Sie
Linux Notfallunterstützung,
Linux-Beratung für Projekte,
Linux Managed Hosting,
Qubes OS Beratung und Support oder
Online- und Vor-Ort-Schulungen?