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 -todersudo visudo -caus. 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.bakvor 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
- scp(1), OpenBSD-Handbuch
- sudoedit, sudo-Handbuch
- Vim netrw, pi_netrw.txt
- SSHFS-README
- TRAMP-Handbuch, GNU Emacs