Entfernte Dateien per SSH bearbeiten

Am schnellsten bearbeiten Sie die Datei direkt auf dem Server: ssh -t user@server nano /path/to/file, oder mit vi, das fast immer installiert ist. Für Dateien, die root gehören, nehmen Sie sudoedit. Wenn Sie den Editor Ihres eigenen Rechners nutzen möchten, holen Sie die Datei mit scp, bearbeiten sie und laden sie zurück, oder Sie überlassen vim den Hin- und Rückweg mit vim scp://user@server//path/to/file. Für ein ganzes Projekt binden Sie den Ordner mit sshfs ein.

Schluss mit Herunterladen, Bearbeiten und Hochladen von Hand: Wardterm öffnet eine Serverdatei im eigenen Editor und speichert sie direkt auf dem Server. Zeigen

Aktualisiert am . Ausgeführt mit OpenSSH 10.0 auf Debian 13 in Wegwerf-Containern, über einen Jump-Host: scp hin und zurück, die Prüfung auf zwischenzeitliche Änderungen, scp abgewiesen bei einer root-Datei, Upload nach /tmp mit sudo install, sudoedit mit SUDO_EDITOR und vim scp:// (Vim 9.1 mit netrw) beim Lesen und Schreiben.

Auf dem Server bearbeiten: nano, vi oder vim

ssh -t user@server nano /etc/nginx/sites-available/site.conf
ssh -t user@server vi /etc/nginx/sites-available/site.conf

Der Editor läuft auf dem Server, und Sie sehen ihn über die Sitzung. -t fordert ein Terminal an, das ein Editor braucht, wenn Sie ihn als Befehl übergeben. Ohne erhalten Sie Pseudo-terminal will not be allocated. Minimale Images haben oft kein nano, vi ist dagegen fast immer vorhanden.

Für eine Datei, die root gehört, nehmen Sie sudoedit statt sudo nano:

ssh -t user@server sudoedit /etc/demo.conf
ssh -t user@server SUDO_EDITOR=nano sudoedit /etc/demo.conf

sudoedit kopiert die Datei, öffnet die Kopie in Ihrem Editor unter Ihrem Benutzer und schreibt sie beim Beenden als root zurück. Ihr Editor und seine Plugins laufen nie als root, und in unserem Test behielt die Datei Eigentümer und Rechte:

-rw-r--r-- 1 root root 4 Nov  6 15:27 /etc/demo.conf

Lokalen Editor nutzen: scp hin und zurück

Um mit dem Editor auf Ihrem eigenen Rechner zu arbeiten, holen Sie die Datei, bearbeiten sie und laden sie zurück:

scp user@server:/etc/nginx/sites-available/site.conf .
cp site.conf site.conf.orig
# edit site.conf in your editor, then:
ssh user@server cat /etc/nginx/sites-available/site.conf | diff -q site.conf.orig -
scp site.conf user@server:/etc/nginx/sites-available/site.conf

Die Zeile mit diff verhindert das übliche Missgeschick: Jemand anderes hat die Datei auf dem Server geändert, während Sie sie bearbeitet haben, und Ihr Upload überschreibt seine Änderung. Keine Ausgabe heißt, dass auf dem Server noch die Fassung liegt, die Sie heruntergeladen haben.

scp schreibt als Ihr Benutzer, bei einer root-Datei schlägt es also fehl:

scp: dest open "/etc/demo.conf": Permission denied
scp: failed to upload file demo.conf to /etc/demo.conf

Laden Sie die Datei nach /tmp und bringen Sie sie mit sudo install an ihren Platz, das setzt auch gleich die Rechte:

scp demo.conf user@server:/tmp/demo.conf
ssh -t user@server sudo install -m 644 /tmp/demo.conf /etc/demo.conf

Weitere Varianten des Befehls mit Ports, Schlüsseln und Ordnern finden Sie in den scp-Beispielen.

Vim den Hin- und Rückweg überlassen

vim scp://user@server//etc/nginx/sites-available/site.conf
vim scp://user@server/notes.txt

Das netrw-Plugin von vim lädt die Datei in eine temporäre Kopie, und :w lädt sie per scp wieder hoch. Zwei Schrägstriche nach dem Host bedeuten einen absoluten Pfad, ein einzelner einen Pfad in Ihrem Home-Ordner auf dem Server. Es nutzt Ihre Schlüssel und Ihre ~/.ssh/config, also funktionieren auch ein Host-Name und ein Jump-Host. In unserem Test kam ein Speichern über einen Jump-Host sofort auf dem Server an.

Emacs erledigt dasselbe mit TRAMP: Öffnen Sie /ssh:user@server:/etc/hosts mit C-x C-f, und beim Speichern wird auf den Server geschrieben.

Den Ordner mit sshfs einbinden

sshfs user@server:/var/www ~/mnt/server

Dann sieht jeder Editor und jedes Werkzeug auf Ihrem Rechner den entfernten Ordner wie einen lokalen. Bei einem Projekt mit vielen Dateien ist das besser, als sie einzeln zu kopieren. Einrichtung, Aushängen und was bei einem Verbindungsabbruch zu tun ist, steht unter einen entfernten Ordner mit sshfs einbinden.

Editoren mit Remote-Modus

Mehrere Code-Editoren können per SSH auf einem Server arbeiten. Sie kopieren ein kleines Hilfsprogramm in Ihren Home-Ordner auf dem Server und starten es unter Ihrem Benutzer: Suche, Vervollständigung und Terminal laufen dort, das Fenster bleibt auf Ihrem Rechner. Für lange Sitzungen an einem Projekt ist das die bequemste Lösung. Sie braucht etwas Speicherplatz auf dem Server und ein Betriebssystem, das das Hilfsprogramm unterstützt, und das Programm läuft mit allen Rechten Ihres Kontos.

Bevor Sie eine Konfigurationsdatei speichern

  • Erst testen, dann neu laden. Führen Sie je nach Datei sudo nginx -t, sudo sshd -t oder sudo visudo -c aus. Ein Tippfehler in einer neu geladenen Konfiguration kann einen Dienst lahmlegen.
  • Lassen Sie eine zweite Sitzung offen, wenn Sie sshd_config, Firewall-Regeln oder PAM-Dateien bearbeiten, damit ein Fehler Sie nicht aussperrt.
  • Achten Sie auf Zeilenenden. Eine mit Windows-Zeilenenden gespeicherte Datei bricht Shell-Skripte mit Fehlern wie /bin/bash^M: bad interpreter.
  • Behalten Sie eine Kopie. Ein sudo cp file file.bak vor dem Start macht den Weg zurück zu einem einzigen Befehl.

Fragen

Wie bearbeite ich per SSH eine Datei, die root gehört?

Führen Sie ssh -t user@server sudoedit /etc/file aus. sudoedit kopiert die Datei, öffnet die Kopie in Ihrem Editor unter Ihrem eigenen Benutzer und schreibt sie beim Beenden als root zurück. Den Editor wählen Sie mit SUDO_EDITOR=nano.

Warum meldet nano auf dem Server command not found?

Minimale Server-Images kommen oft ohne nano. vi ist fast immer vorhanden, oder Sie installieren nano mit dem Paketmanager, zum Beispiel sudo apt install nano.

Kann ich eine entfernte Datei mit einem lokalen Editor bearbeiten, ohne sie zu kopieren?

Nicht wirklich: Irgendetwas kopiert sie immer. sshfs, vim scp:// und Editoren mit Remote-Modus übernehmen nur das Kopieren für Sie, bei jedem Öffnen und Speichern.

Warum beschwert sich mein Editor per SSH über das Terminal?

Sie haben ssh server nano file ohne -t ausgeführt, also wurde kein Terminal zugewiesen. Fügen Sie -t hinzu: ssh -t server nano file.

Quellen

Mehr zu SFTP und Dateiübertragung

Alle Anleitungen