¿Puede vim editar un archivo remoto como root?

10

Encontré esta pregunta que explica cómo editar un archivo remoto con vim usando:

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

¿Es posible hacer esto como root (vía sudo) en el host remoto?

Intenté crear un archivo con permisos de root en el host remoto y editarlo con lo anterior. Vim puede ver el contenido, puede editarlo y guardarlo, pero nada cambia en el host remoto (probablemente porque vim solo está guardando su archivo temporal y luego se lo está dando a scp para que lo vuelva a poner).

Al hacer esto con un archivo guardado por mi usuario, se comporta como se esperaba.

Mi SSH usa una clave para autenticar y el servidor remoto tiene NOPASSWD para mi acceso a sudo

Esta pregunta es similar, pero la única respuesta con votos usa títere, que definitivamente no es lo que quiero usar.


Editar: en respuesta al comentario de @ drewbenn a continuación, aquí está mi proceso completo para editar:

vim scp://nagios//tmp/notouch

¿Dónde /tmp/notouchestá el archivo propiedad de root? Veo que vim muestra rápidamente

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

Esto desaparece automáticamente para producir una pantalla negra vacía con el texto

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

Presionar enter me permite editar el archivo

Al guardar aparece el mismo tipo de comando scp que al principio, que desaparece rápida y automáticamente (es difícil leerlo a tiempo, pero los archivos scp y / tmp / ... definitivamente están ahí)

Mitch
fuente
2
Solo sshal servidor y edite el archivo allí (con visudo, o lo que sea). Cualquier otra cosa tiene implicaciones de seguridad.
Satō Katsura
@SatoKatsura No veo ninguna implicación de seguridad real aparte de tener una copia del archivo remoto en su host local. Quiero usar mi versión local de vim debido a la versión y para mi .vimrcarchivo
Mitch
¿Por qué no utilizar la administración de configuración para enviar (o extraer) los archivos a producción? Entonces puedes usar tu editor local.
thrig
@drewbenn He actualizado la pregunta con una edición que muestra el proceso completo que estoy usando
Mitch
Hmmm ... ¿esto no funciona? ssh -t host sudo vim file?
Kusalananda

Respuestas:

9

Voy a decir que esto no es posible porque vimno está ejecutando comandos remotos. Simplemente se usa scppara copiar el archivo, editarlo localmente y scpvolver a hacerlo cuando haya terminado. Como se indica en esta pregunta sudo a través scpno es posible y se recomienda que o bien modificar los permisos para llevar a cabo lo que está queriendo o simplemente a través de ssh a la máquina remota.

Zachary Brady
fuente
No es la respuesta que esperaba, pero parece ser la correcta. Tal vez escribiré un complemento para solucionar esto ...
Mitch
Hola @Mitch, ¿encontraste alguna solución / complemento para resolver tu problema? Estoy experimentando exactamente la misma situación! ¡Gracias!
Bruno Belotti
4

Al igual que la respuesta aceptada, no creo que esto sea posible directamente.

Sin embargo, veo al menos dos formas de lograr su objetivo.

Ejecutando vim de forma remota

ssh user@myserver sudo vim /some/file

Esto tiene desventajas:

  • Sus interacciones con vim pasan por la red. Un retraso significativo será molesto, y si su conexión muere, también lo hará vim (eventualmente).
  • Esto no usará su configuración vim local, sino la configuración vim de la raíz remota.

Pero tiene la ventaja de trabajar.

Haciendo el scp fuera de vim

Puede copiar el archivo localmente, editarlo y volver a copiarlo. Y podría automatizar eso para que sea casi tan transparente como el soporte scp de vim.

Algo como el siguiente script de shell podría funcionar (nota, ¡completamente no probado!):

#! /bin/sh

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

Esto te permitiría hacer algo como rvim user@myserver /some/file. Incluso conserva la copia local si falla la segunda transferencia, para que no pierda sus cambios.

El script podría usar muchas mejoras (como mínimo, la comprobación de errores), pero es un punto de partida.

marcelm
fuente
3

Necesitaría la contraseña de root o tener su clave ssh pública en ~ root / .ssh / optional_keys. Una vez que tengas eso, probablemente puedas hacer

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

En pocas palabras: esto es efectivamente solo un atajo para

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

Si tiene el acceso necesario para hacerlo, entonces tiene el acceso necesario para usar el complemento de acceso a la red de vim. Si no, entonces no lo haces.

Como señala Zachary Brady, sudono está involucrado. Necesitará acceso ssh a la cuenta raíz.

¿Lo has probado?

Edward Falk
fuente
1
No tengo la contraseña de root, y no estoy seguro de que me sienta cómodo poniendo mi clave allí sin el permiso de las personas propietarias del servidor. El verdadero atajo que está haciendo para mí me está salvando de ssh-ing, sudo cp-ing, scp-ing, edición, scp-ing, ssh-ing, sudo cp-ing (ya que mi usuario no puede leer el archivo). sshfs puede ser el camino a seguir aquí
Mitch
Existe una buena posibilidad de que sshfs tampoco funcione si no tiene acceso ssh a root. El sistema de archivos remotos probablemente se montará solo con sus permisos. Creo que en este punto, su única opción esssh remotesystem sudo vim file
Edward Falk
Tienes razón: sshfs no funciona (y me dijiste que accidentalmente me compré un montón de archivos que no debería haber sido ...) aunque pensé que estaba funcionando
Mitch
1
@Mitch: las personas que poseen el servidor le dieron una cuenta de usuario y, creo, usted es responsable de lo que usa esa cuenta. Está colocando allí una clave pública que cualquier persona con acceso a esa cuenta podría. Está vinculando los permisos de esa cuenta a la posesión de la clave privada tanto como lo permite el conocimiento de la contraseña. es decir, desde el punto de vista del servidor, no hay diferencia entre tener una clave o saber la contraseña.
grochmal
En pocas palabras: creo que tiene razón al dudar en poner su clave pública en ese servidor. Creo que estás atrapado con ssh / sudo vim
Edward Falk