Come modificare file remoti via SSH

Il modo più rapido è modificare il file direttamente sul server: ssh -t user@server nano /path/to/file, oppure vi, che c'è quasi sempre. Per i file di root usa sudoedit. Per usare l'editor del tuo computer, scarica il file con scp, modificalo e ricaricalo, oppure lascia fare il giro a vim con vim scp://user@server//path/to/file. Per un progetto intero, monta la cartella con sshfs.

Aggiornata il . Eseguito con OpenSSH 10.0 su Debian 13 in container usa e getta, passando da un jump host: scp in andata e ritorno, il controllo delle modifiche fatte nel frattempo, scp rifiutato su un file di root, caricamento in /tmp con sudo install, sudoedit con SUDO_EDITOR e vim scp:// (Vim 9.1 con netrw) in lettura e scrittura.

Modificare sul server: nano, vi o vim

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

L'editor gira sul server e lo vedi attraverso la sessione. -t chiede un terminale, che serve a un editor quando lo passi come comando. Senza ottieni Pseudo-terminal will not be allocated. Le immagini minime spesso non hanno nano, mentre vi c'è quasi sempre.

Per un file di proprietà di root, usa sudoedit invece di sudo nano:

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

sudoedit copia il file, apre la copia nel tuo editor con il tuo utente e la riscrive come root quando esci. Il tuo editor e i suoi plugin non girano mai come root, e nella nostra prova il file ha mantenuto proprietario e permessi:

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

Usare un editor locale: scp in andata e ritorno

Per modificare con l'editor che hai sul tuo computer, scarica il file, modificalo e ricaricalo:

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

La riga con diff evita l'incidente più comune: qualcun altro ha cambiato il file sul server mentre lo modificavi, e il tuo caricamento cancella la sua modifica. Se non esce nulla, la copia sul server è ancora quella che hai scaricato.

scp scrive con il tuo utente, quindi su un file di root fallisce:

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

Caricalo in /tmp e mettilo al suo posto con sudo install, che imposta anche i permessi:

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

Altre forme del comando, con porte, chiavi e cartelle, sono negli esempi di scp.

Lasciare fare il giro a vim

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

Il plugin netrw di vim scarica il file in una copia temporanea, e :w lo ricarica con scp. Due barre dopo l'host indicano un percorso assoluto. Una barra sola indica un percorso nella tua cartella home sul server. Usa le tue chiavi e il tuo ~/.ssh/config, quindi funzionano anche un nome Host e un jump host. Nella nostra prova, un salvataggio passato da un jump host è arrivato subito sul server.

Emacs fa lo stesso con TRAMP: apri /ssh:user@server:/etc/hosts con C-x C-f, e salvando scrivi sul server.

Montare la cartella con sshfs

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

Ogni editor e strumento del tuo computer vede allora la cartella remota come se fosse locale. Per un progetto con molti file è meglio che copiarli uno per uno. Installazione, smontaggio e cosa fare quando la connessione cade sono in montare una cartella remota con sshfs.

Editor con modalità remota

Diversi editor di codice possono lavorare su un server via SSH. Copiano un piccolo programma di supporto nella tua cartella home sul server e lo eseguono con il tuo utente, così ricerca, completamento e terminale girano lì mentre la finestra resta sul tuo computer. È la soluzione più comoda per sessioni lunghe su un solo progetto. Richiede un po' di spazio su disco sul server e un sistema operativo supportato dal programma, che gira con tutti i diritti del tuo account.

Prima di salvare un file di configurazione

  • Prova prima di ricaricare. Esegui sudo nginx -t, sudo sshd -t o sudo visudo -c, a seconda del file. Un errore di battitura in una configurazione ricaricata può fermare un servizio.
  • Tieni aperta una seconda sessione quando modifichi sshd_config, le regole del firewall o i file PAM, così un errore non ti chiude fuori.
  • Attenzione ai fine riga. Un file salvato con i fine riga di Windows rompe gli script di shell con errori come /bin/bash^M: bad interpreter.
  • Tieni una copia. Un sudo cp file file.bak prima di iniziare rende il ritorno indietro un solo comando.

Domande

Come modifico via SSH un file di proprietà di root?

Esegui ssh -t user@server sudoedit /etc/file. sudoedit copia il file, apre la copia nel tuo editor con il tuo utente e la riscrive come root quando esci. Scegli l'editor con SUDO_EDITOR=nano.

Perché sul server nano risponde command not found?

Le immagini minime dei server spesso non hanno nano. vi c'è quasi sempre, oppure installa nano con il gestore di pacchetti, per esempio sudo apt install nano.

Posso modificare un file remoto con un editor locale senza copiarlo?

Non proprio: qualcosa lo copia sempre. sshfs, vim scp:// e gli editor con modalità remota fanno solo la copia al posto tuo, ogni volta che apri e salvi.

Perché via SSH l'editor si lamenta del terminale?

Hai eseguito ssh server nano file senza -t, quindi non è stato assegnato un terminale. Aggiungi -t: ssh -t server nano file.

Fonti

Altro in SFTP e trasferimento file

Tutte le guide