¿Cómo edito archivos de forma remota a través de ssh?

83

Tengo que editar algunos archivos ubicados en algún servidor al que pueda acceder a través de ssh.

Preferiría editar estos archivos de forma personalizada vimen mi estación de trabajo (no tengo derechos para cambiar la vimconfiguración en el servidor remoto). A veces me gustaría editar un archivo con sublime textu otro editor de GUI.

Por supuesto, puedo descargar estos archivos, editarlos localmente y subirlos de nuevo al servidor. ¿Hay alguna solución más elegante?

Telar
fuente

Respuestas:

66

Puede hacer esto montando la carpeta remota como un sistema de archivos usando sshfs. Para hacer esto, primero algunos requisitos previos:

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

Ahora, haga el proceso de montaje:

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

Después de esto, simplemente vaya a la carpeta montada y use su propio vim personalizado local.

shivams
fuente
44
Como era de esperar, el paso de instalación fallará en las distribuciones que no están debbasadas y, por lo tanto, no lo tienen apt-get. (En cuyo caso, yumo zypperpodría estar presente). También requieren root en la máquina local, que puede o no estar disponible. (Esto no quiere decir que sea una mala solución, pero viene con un gran requisito previo).
Ulrich Schwarz
55
Bueno. Lo averigué. Todo esto se hace en la máquina local. En el caso de OS X uno tiene que instalar osxfusey sshfs. Estos se pueden instalar con homebrew ( brew install sshfsy brew cask install osxfuse, o de paquetes obtenidos de osxfuse.github.io
inspirednz
95

Puede hacerlo de scpesta manera:

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

Observe las dos barras //entre el servidor y la ruta, que es necesaria para resolver correctamente la ruta absoluta. (La primera barra es sintáctica, mientras que la segunda barra especifica el directorio raíz del usuario remoto, como de costumbre. Para comenzar en el directorio de inicio, lo haría [:port]/~/path/to/file.txt). [:port]Es opcional.

Esto es manejado por el complemento estándar netrw.vim de vim . Varios otros protocolos son compatibles.

Flo Mismo
fuente
66
Sí, el archivo se recupera en un archivo temporal, que se carga en el servidor al guardar.
FloHelf
1
Gracias. Sin embargo, recibí un error cuando intenté guardar el archivo:E382: Cannot write, 'buftype' option is set
Loom
2
Puedes probar :set buftype=""​en vim.
FloHelf
2
Además, vim leerá ~/.ssh/configy resolverá hosts remotos con vim scp://[host]/path.
Jangari
2
@stillanoob::e scp://...
FloHimself
6

Dependiendo de lo que quiera decir cuando dice que no tiene los derechos para editar la configuración de Vim, puede haber una forma de usar Vim en el servidor de la manera que desee de todos modos. Si no puede cambiar su usuario .vimrc(porque está iniciando sesión como un usuario compartido, por ejemplo) pero aún puede crear archivos, créelo como un archivo llamado, digamos, Loom.vimrcy luego llame a Vim usando el -uinterruptor:

vim -u ~/Loom.vimrc file_to_edit

Incluso puede usar un alias: alias vim='vim -u ~/Loom.vimrc'le permitirá usar Vim de la manera habitual, y aún cargará su .vimrcarchivo personalizado . Este alias no persistirá después de cerrar sesión, por lo que no debe preocuparse por si alguien más usa accidentalmente su Vim personalizado.

Tom Potts
fuente
2

Dependiendo de cuántos archivos y qué tipo de archivos espere editar, quizás esto no sea exactamente lo que desea hacer aquí, pero creo que vale la pena mencionarlo. Si tiene que editar archivos en un servidor remoto, pero quiere usar todo lo que tiene en su propia estación de trabajo, entonces puede comenzar a pensar en usar algún tipo de sistema de Control de Revisión en sus máquinas. De esa manera, puede modificar sus copias locales en su propia máquina utilizando el software de su elección, confirmar los cambios y luego simplemente actualizar las copias locales en la máquina de destino. Además de editar los archivos con cualquier software con el que se sienta cómodo, tiene el valor agregado de tener un historial de cambios relacionados con cada archivo, que siempre es bueno.

Aquí hay una lista de software de control de revisiones , por si acaso.

jimm-cl
fuente
¿Está sugiriendo el uso de algo como confirmar los cambios git, empujarlo a algo así githuby extraer los cambios de githubsu máquina local para hacer cambios allí?
alpha_989
Esto es factible para los cambios de código complejas .. pero por simple código cambia tal vez .. lo @FloHimself o shivams mencionado es más fácil de implementar ..
alpha_989
1

Para ampliar la respuesta del Sr. Potts: También puede hacer lo anterior, luego poner algo como esto en .bash_profile (o lo que sea que use su shell):

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

donde Loom es su ID de usuario original en el que inicia sesión.

Si está iniciando sesión como una cuenta compartida (y no como una cuenta individual, entonces sudo demanda, entonces Von Neuman tenga piedad de su alma porque está perdido.

Hubiera puesto esto en un comentario, pero no pude formatear el código en absoluto.

Petro
fuente
0

Si tiene una sesión vim ejecutándose ya use

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

El :silentfrente suprimirá el Press Enter to Continuemensaje

y

e scp://user@myserver[:port]//path/to/file.txtes el Excomando de modo para editar el archivo remnote.

Probado con la BitVise SSHDejecución en Windows 10 y el uso de VIM en Ubuntu 16.04

alpha_989
fuente
Solo una nota de que esto suprime la Press Enter to Continuecarga inicial, pero no la posterior:w
Sparhawk