Come posso modificare i file in remoto tramite ssh?


83

Devo modificare alcuni file posizionati su alcuni server che potrei raggiungere tramite ssh.

Preferirei modificare questi file in modo personalizzato vimsulla mia workstation (non ho i diritti per modificare le vimimpostazioni sul server remoto). A volte vorrei modificare un file con sublime texto un altro editor GUI.

Certo, posso scaricare questi file, modificarli localmente e caricarli di nuovo sul server. C'è una soluzione più elegante?

Risposte:


66

Puoi farlo montando la cartella remota come file system usando sshfs. Per fare questo, prima alcuni prerequisiti:

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

Ora esegui il processo di montaggio:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

Dopo questo, vai nella cartella montata e usa il tuo vim personalizzato locale.


4
Non sorprende che il passaggio dell'installazione fallisca nelle distribuzioni che non sono debbasate e quindi non hanno apt-get. (Nel qual caso, yumo zypperpotrebbe essere presente.) Richiedono anche root sul computer locale, che potrebbe essere o meno disponibile. (Questo non vuol dire che è una cattiva soluzione, ma viene fornito con un grande prerequisito.)
Ulrich Schwarz,

5
Va bene. Capito. Tutto questo viene eseguito sul computer locale. Nel caso di OS X è necessario installare osxfusee sshfs. Questi possono essere installati con homebrew ( brew install sshfse brew cask install osxfuse, o da pacchetti ottenuti da osxfuse.github.io
inspirednz,

95

Puoi farlo in scpquesto modo:

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

Notare le due barre //tra server e percorso, necessarie per risolvere correttamente il percorso assoluto. (La prima barra è sintattica, mentre la seconda barra specifica la directory principale dell'utente remoto, come al solito. Per iniziare dalla home directory, lo faresti [:port]/~/path/to/file.txt.) [:port]È facoltativo.

Questo è gestito dal plugin standard nimw.vim di vim . Sono supportati numerosi altri protocolli.


6
Sì, il file viene recuperato in un file temporaneo, che viene caricato sul server al momento del salvataggio.
FloHimself

1
Grazie. Tuttavia, ho riscontrato un errore quando ho provato a salvare il file:E382: Cannot write, 'buftype' option is set
Telaio

2
Puoi provare :set buftype=""​in vim.
FloHimself

2
Inoltre, vim leggerà ~/.ssh/confige risolverà gli host remoti con vim scp://[host]/path.
Jangari,

2
@stillanoob::e scp://...
FloHimself

6

A seconda di cosa intendi quando dici di non avere i diritti per modificare le impostazioni di Vim, potrebbe esserci un modo di usare Vim sul server nel modo che preferisci. Se non riesci a cambiare il tuo utente .vimrc(perché stai accedendo come utente condiviso, ad esempio) ma puoi comunque creare file, crearlo come un file chiamato, diciamo, Loom.vimrcquindi chiamare Vim usando l' -uopzione:

vim -u ~/Loom.vimrc file_to_edit

Puoi anche usare un alias: alias vim='vim -u ~/Loom.vimrc'ti permetterà di usare Vim nel solito modo e caricherà comunque il tuo .vimrcfile personalizzato . Questo alias non persisterà dopo la disconnessione, quindi non devi preoccuparti che nessun altro usi accidentalmente Vim personalizzato.


2

A seconda di quanti file e che tipo di file ti aspetti di modificare, questo non è esattamente quello che vuoi fare qui, ma penso che valga la pena menzionarlo. Se devi modificare i file in un server remoto, ma vuoi utilizzare tutto ciò che hai nella tua postazione di lavoro, allora potresti voler iniziare a pensare di utilizzare un qualche tipo di sistema di controllo delle revisioni nelle tue macchine. In questo modo, è possibile modificare le copie locali nella propria macchina utilizzando il software scelto, confermare le modifiche e quindi semplicemente aggiornare le copie locali nella macchina di destinazione. Oltre a modificare i file con qualsiasi software ti senti a tuo agio, hai il valore aggiunto di avere una cronologia delle modifiche relative a ciascun file, il che è sempre buono.

Ecco un elenco di software di controllo delle revisioni , per ogni evenienza.


Stai suggerendo l'uso di qualcosa come il commit delle modifiche git, spingendolo a qualcosa di simile githube il pull delle modifiche githubal tuo computer locale, per apportare modifiche lì?
alpha_989,

Questo è fattibile per modifiche complesse al codice .. ma forse per semplici modifiche al codice .. ciò che @FloHimself o shivams menzionato è più facile da implementare ..
alpha_989

1

Per espandere la risposta di Mr. Potts: Puoi anche fare quanto sopra, quindi inserire qualcosa del genere in .bash_profile (o qualunque cosa usi la tua shell):

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

dove Loom è il tuo ID utente originale a cui accedi come.

Se stai accedendo come account condiviso (e non come account individuale, allora fai sudo su, allora Von Neuman potrebbe avere pietà della tua anima per te, perdendoti.

Lo avrei inserito in un commento, ma non sono riuscito a formattare il codice.


0

Se hai già una sessione vim in esecuzione, usa

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

Il :silentdavanti sopprimerà il Press Enter to Continuemessaggio

e

e scp://user@myserver[:port]//path/to/file.txtè il Excomando mode per modificare il file della nota.

Testato con BitVise SSHDWindows 10 e con VIM su Ubuntu 16.04


Solo una nota che questo sopprime il Press Enter to Continuecaricamento iniziale, ma non per eventuali successivi:w
Sparhawk,
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.