Vim può modificare un file remoto come root?


10

Ho trovato questa domanda che spiega come modificare un file remoto con vim usando:

vim scp://user@myserver[:port]//path/to/file.txt

È possibile farlo come root (via sudo) sull'host remoto?

Ho provato a creare un file con permessi di root sull'host remoto e modificarlo con quanto sopra. Vim può vedere il contenuto, modificarlo e salvarlo ma nulla cambia sull'host remoto (probabilmente perché vim sta semplicemente salvando il suo file temporaneo e lo sta dando a scp per rimetterlo?)

Quando lo fa con un file salvato dal mio utente, si comporta come previsto.

Il mio SSH utilizza una chiave per l'autenticazione e il server remoto ha NOPASSWD per il mio accesso sudo

Questa domanda è simile, ma l'unica risposta con i voti usa il burattino che non è sicuramente quello che voglio usare.


Modifica: in risposta al commento di @ drewbenn di seguito, ecco il mio processo completo per la modifica:

vim scp://nagios//tmp/notouch

Dov'è /tmp/notouchil file di proprietà di root, vedo vim mostrare rapidamente

:!scp -q 'nagios:/tmp/notouch' '/tmp/vaHhwTl/0'

Questo scompare automaticamente per produrre uno schermo nero vuoto con il testo

"/tmp/vaHhwTl/0" 1L, 12C
Press ENTER or type command to continue

Premendo Invio mi permette di modificare il file

Il salvataggio fa apparire lo stesso tipo di comando scp dell'inizio, che scompare rapidamente e automaticamente (è difficile leggerlo in tempo ma i file scp e / tmp / ... sono sicuramente lì)


2
Solo sshsul server e modifica il file lì (con visudoo qualsiasi altra cosa). Qualsiasi altra cosa ha implicazioni per la sicurezza.
Satō Katsura,

@SatoKatsura Non riesco a vedere alcuna reale implicazione sulla sicurezza se non quella di avere una copia del file remoto sul tuo localhost. Voglio usare la mia versione locale di Vim a causa della versione e per il mio .vimrcfile
Mitch,

Perché non utilizzare invece la gestione della configurazione per inviare (o estrarre) i file alla produzione? Quindi puoi semplicemente usare l'editor locale.
thrig

@drewbenn Ho aggiornato la domanda con una modifica che mostra l'intero processo che sto usando
Mitch,

Hmmm ... non funziona? ssh -t host sudo vim file?
Kusalananda

Risposte:


9

Sto per dire che questo non è possibile perché vimnon esegue comandi remoti. Sta semplicemente usando scpper copiare il file, modificarlo localmente e scpal termine. Come indicato in questa domanda sudo tramite scpnon è possibile e si consiglia di modificare le autorizzazioni per realizzare ciò che si desidera o semplicemente ssh attraverso la macchina remota.


Non è la risposta che speravo, ma sembra essere quella corretta. Forse scriverò un plugin per aggirare questo ..
Mitch,

Ehi @Mitch, hai trovato qualche soluzione / plugin per risolvere il tuo problema? Sto vivendo esattamente la stessa situazione! Grazie!
Bruno Belotti,

4

Come la risposta accettata, non penso che sia possibile direttamente.

Tuttavia, vedo almeno due modi per raggiungere ancora il tuo obiettivo.

Esecuzione di vim in remoto

ssh user@myserver sudo vim /some/file

Questo ha degli svantaggi:

  • Le tue interazioni con vim passano attraverso la rete. Un ritardo significativo sarà fastidioso, e se la tua connessione si interrompe, anche Vim (alla fine).
  • Questo non utilizzerà la configurazione locale di VIM, ma la configurazione VIM di Remote.

Ma ha il vantaggio di lavorare.

Fare lo scp al di fuori di Vim

Potresti semplicemente copiare il file localmente, modificarlo e copiarlo di nuovo. E potresti automatizzarlo per renderlo quasi perfetto come il supporto scim di vim.

Qualcosa come il seguente script di shell potrebbe funzionare (nota, completamente non testato!):

#! /bin/sh

TMPFILE=$(mktemp)
ssh -- "$1" sudo cat "'$2'" > ${TMPFILE}
vim ${TMPFILE}
ssh -- "$1" "sudo tee '$2' > /dev/null" < ${TMPFILE} && \
  rm -f ${TMPFILE}

Ciò ti consentirebbe di fare qualcosa del genere rvim user@myserver /some/file. Mantiene anche la copia locale se il secondo trasferimento non riesce, in modo da non perdere le modifiche.

Lo script potrebbe utilizzare molti miglioramenti (almeno il controllo degli errori), ma è un punto di partenza.


3

Dovresti avere la password di root o avere la tua chiave ssh pubblica in ~ root / .ssh / authorized_keys. Una volta che l'hai avuto, probabilmente potresti farlo

vim scp://root@nagios//tmp/notouch

In conclusione: questa è effettivamente solo una scorciatoia per

scp root@nagios:/tmp/notouch /tmp/notouch
vim /tmp/notouch
scp /tmp/notouch root@nagios:/tmp/notouch

Se hai l'accesso necessario per farlo, allora hai l'accesso necessario per utilizzare il plug-in di accesso alla rete di vim. Altrimenti, allora no.

Come sottolinea Zachary Brady, sudonon è coinvolto. Avrai bisogno dell'accesso ssh all'account di root.

L'hai provato?


1
Non ho la password di root e non sono sicuro di sentirmi a mio agio a inserire la mia chiave senza il permesso delle persone che possiedono il server. La vera scorciatoia che sta facendo per me mi sta salvando da ssh-ing, sudo cp-ing, scp-ing, editing, scp-ing, ssh-ing, sudo cp-ing (poiché il mio utente non è in grado di leggere il file). sshfs potrebbe essere la strada da percorrere qui
Mitch,

C'è una buona probabilità che sshfs non funzioni neanche se non si ha accesso ssh a root. Il file system remoto verrebbe probabilmente montato solo con le tue autorizzazioni. Penso a questo punto, l'unica opzione èssh remotesystem sudo vim file
Edward Falk,

Hai ragione - sshfs non funziona (e mi hai fatto notare che avevo accidentalmente creato un mucchio di file per me che non avrebbe dovuto essere ...) anche se pensavo che funzionasse
Mitch,

1
@Mitch - Le persone che possiedono il server ti hanno dato un account utente e, credo, sei responsabile di ciò per cui usi quell'account. Stai inserendo lì una chiave pubblica che chiunque abbia accesso a tale account potrebbe. Stai vincolando le autorizzazioni di quell'account al possesso della chiave privata tanto quanto consente la conoscenza della password. cioè dal punto di vista del server non c'è differenza tra avere una chiave o conoscere la password.
grochmal,

In conclusione: penso che tu abbia esitato a mettere la tua chiave pubblica su quel server. Penso che tu sia bloccato con ssh / sudo vim
Edward Falk il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.