SSH Tricks - Was SSH auch noch kann
Jeder IT-Profi kennt die Secure Shell (SSH), um über's Netzwerk Systeme zu administrieren und Daten zu transferien. Dabei kann SSH noch einiges mehr, als man auf den ersten Blick sieht. Dieser Artikel stellt ein paar nützliche Features vor.
Inaktive Verbindungen offenhalten
Oft hat man eine SSH-Verbindung offen, auf welcher man aber gerade für eine Weile nicht arbeitet. Wenn man dann wieder etwas eintippt, reagiert diese zuerst nicht und es gibt eine Verzögerung, ehe die Verbindung wiederhergestellt ist.
Dem kann man mit folgender Einstellung (auf dem SSH Client!) entgegenwirken:
Host *
ServerAliveInterval 60
Damit schickt der Client jede Minute ein "Null-Packet", mit welchem die Verbindung offengehalten wird. Dies ist in der Datei .ssh/config
(im Home-Directory des Benutzers) einzutragen.
Chroot-Filetransfer
Das Szenario hier ist, dass man via SSH Dateien in einem bestimmten Verzeichnis austauschen möchte, aber ohne Shell-Zugriff und auch wirklich nur in diesem Verzeichnis. Dazu ist in der Datei /etc/ssh/sshd_config
folgendes hinzuzufügen:
Subsystem sftp internal-sftp
Match User testuser
AllowUsers testuser@192.168.128.99
ChrootDirectory /var/www/testdir
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Damit erhält der Benutzer testuser
mit der IP-Adresse 192.168.128.99
SFTP-Zugriff auf das Verzeichnis /var/www/testdir
, wobei er nicht aus diesem "ausbrechen" kann. Natürlich muss der Benutzer auf diesem Verzeichnis auch über die entsprechenden Rechte verfügen.
In Kombination mit Public Key Authentication ist dies eine schlanke und sichere Lösung für Dateiaustausch und ein weiteres Beispiel dafür, wie vielseitig einsetzbar SSH ist.
Remote Codeausführung
Natürlich kann man via SSH-Terminal auch lokal vorbereitete Scripte auf einem entfernten Host ausführen. Es empfiehlt sich dabei, passwortlose Public Key Authentisierung konfiguriert zu haben (so dass nicht immer ein Passwort eingegeben werden muss).
Das lokal vorliegende Script ein_script.sh
kann wie folgt auf dem entfernten Host ausgeführt werden:
ssh remote_user@remote_hostname 'bash -s' < ein_script.sh
Falls man auf den Output lokal noch reagieren möchte, kann man diesen auch in eine Variable speichern und dann weiterverarbeiten:
#!/bin/bash
command_output=$(ssh remote_user@remote_hostname 'bash -s' < ein_script.sh)
echo "$command_output"
Achtung: Dies ist Remote-Code Ausführung (RCE) im eigentlichsten Wortsinne, hier ist also Vorsicht geboten!