SSH-basierte Helfer: Clipboard und E-Mail ohne lokale Installation
Anwendungsfall: Praktische Lösungen, um auf minimalistischen Servern ohne GUI (X oder Wayland) bzw. ohne Mailserver-Installation trotzdem einfach Inhalte ins Clipboard zu übertragen oder E-Mails zu versenden.
📋 Remote-Clipboard via SSH
Szenario: Du willst von einem Headless-Server ohne GUI schnell Inhalte in das Clipboard eines entfernten Desktop-PCs übertragen.
1. Voraussetzungen auf dem Desktop-PC
Installiere xsel (alternativ: xclip):
sudo apt install xsel
2. SSH-Key mit restriktiver Berechtigung
In der Datei ~/.ssh/authorized_keys auf deinem Desktop-PC:
command="xsel -i --clipboard --display :1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3... user@host # Remote Clipboard via SSH
- Passe den SSH-Key (
AAAAB3...) und das Display (:1) entsprechend deiner Umgebung an.
3. Komfortables Alias auf dem Server (Quelle)
In .bashrc:
alias remoteclip='ssh user@desktop-pc "xsel -i --clipboard --display :1"'
Nutzung:
echo "Das ist im Clipboard!" | remoteclip
ls -l /etc | remoteclip
Ergebnis: Die Ausgabe landet direkt im Clipboard des entfernten Rechners.
📧 Remote-Mail-Versand via SSH
Szenario: Ein Server ohne Mailprogramm (postfix, ssmtp) soll dennoch E-Mails versenden können, etwa für Statusmeldungen oder Warnungen.
1. Voraussetzungen auf dem Mail-versendenden Rechner
Installiere ein einfaches Mailprogramm (mailutils oder bsd-mailx):
sudo apt install mailutils
2. SSH-Key mit restriktiver Berechtigung
In der Datei ~/.ssh/authorized_keys:
command="/usr/local/bin/remotemail",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3... host@example # Remote-Mail via SSH
3. Wrapper-Skript erstellen
Erstelle die Datei /usr/local/bin/remotemail mit folgendem Inhalt:
#!/bin/bash
HOST=$(hostname)
SUBJECT=${SSH_ORIGINAL_COMMAND:-"Servermeldung von $HOST"}
mail -s "$SUBJECT" admin@example.com
Rechte setzen:
chmod +x /usr/local/bin/remotemail
4. Alias oder Skript auf dem Server (Quelle)
In .bashrc:
alias sendmail='ssh -T user@example.com "$(hostname):ssh mailuser@mailhost'
Nutzung:
Einfacher Versand:
echo "Speicherplatz knapp!" | sendmail
Versand mit individuellem Betreff:
echo "Platte /dev/sda ist fast voll!" | ssh mailuser@mailhost "Warnung: HDD kritisch!"
Ergebnis: Du erhältst zuverlässig eine E-Mail, ganz ohne lokale Mail-Server-Konfiguration.
SSH: "Too many authentication failures" - Workaround
Problem
Nach Anpassen von ~/.ssh/config mit IdentityFile und IdentitiesOnly yes
bleibt der Fehler bestehen:
Received disconnect from x.x.x.x port 22:2: Too many authentication failures
Ursache
Der SSH-Client probiert beim Verbindungsaufbau alle verfügbaren Keys durch
die im ssh-agent oder unter ~/.ssh/ liegen - auch wenn IdentityFile gesetzt
ist. Der Server bricht nach zu vielen Fehlversuchen die Verbindung ab.
IdentitiesOnly yes in der Config löst das - aber nur wenn die Config auch
wirklich neu eingelesen wird.
Sofort-Lösung
Einmalig eine Verbindung per Hostname statt IP aufbauen:
ssh red-prod
Dadurch wird die ~/.ssh/config frisch eingelesen. Danach funktioniert
auch die direkte IP-Variante wieder:
ssh root@192.168.100.122
Richtige Lösung - ~/.ssh/config
Host red-prod
HostName 192.168.100.122
User root
IdentityFile ~/.ssh/id_red_prod
IdentitiesOnly yes
IdentitiesOnly yes ist entscheidend - damit wird ausschließlich der
angegebene Key verwendet, alle anderen werden ignoriert.
Bonus: SSH ControlMaster
ControlMaster ist ein optionales SSH-Feature das Verbindungen multiplext -
mehrere SSH-Sessions teilen sich eine TCP-Verbindung. Das spart Zeit beim
wiederholten Einloggen.
Aktivieren in ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
Vorteile
- Zweiter Login zum gleichen Host: sofort, ohne Key-Handshake
- Kein erneutes Passwort/Key nötig innerhalb von 10 Minuten
- SCP und SFTP profitieren ebenfalls
Cache leeren wenn nötig
Wenn ControlMaster aktiv ist und die Config geändert wurde:
# Einzelne Verbindung beenden
ssh -O exit red-prod
# Alle ControlPath-Sockets auf einmal
rm ~/.ssh/cm-*
Hinweis
Ohne ControlMaster in der Config (Standard) werden keine cm-* Dateien
angelegt - der Hostname-Trick oben funktioniert dann aus einem anderen Grund:
Der Client liest beim Hostname-Lookup die Config neu ein und wendet
IdentitiesOnly yes korrekt an.
🛡️ Sicherheitshinweise
- Nutze separate, dedizierte SSH-Keys mit restriktiven Optionen (
command=). - Kommentiere die Schlüssel in
authorized_keysklar. - Prüfe regelmäßig die Nutzung der SSH-Keys und aktualisiere ggf. die Einschränkungen.