Linuxgarage.ch

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!