Quiero abrir un archivo dentro de Emacs que se encuentra en un servidor remoto, con sudo en el servidor. Puedo abrir archivos locales con sudo a través de Tramp así:
C-x C-f /sudo::/home/user/file
Pero quiero usar sudo en el servidor:
C-x C-f /sudo::user@server/home/user/file
Pero esto me da poderes de sudo en mi máquina local, me pide mi contraseña de sudo en la máquina local. ¿Hay alguna forma de usar sudo en el servidor?
Por cierto: Emacs no está instalado en el servidor
Respuestas:
A partir de Emacs 24.3, un análogo de la
multi:
sintaxis antigua se ha superpuesto altramp-default-proxies-alist
enfoque moderno , lo que significa que puede volver a realizar saltos múltiples sin ninguna configuración previa. Para obtener más detalles, consulte:C-hig
(tramp) Ad-hoc multi-hops
RETCon la nueva sintaxis, cada 'salto' está separado por
|
. El ejemplo del manual es:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETQue se conecta en primer lugar como
bird@bastion
, y de ahí ayou@remotehost:/path
/ su: o / sudo: en hosts remotos
También puede usar esta sintaxis para sudo / su a root (o por supuesto a cualquier otro usuario) en un host remoto:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETImportante : asegúrese de especificar el nombre de host explícitamente: en
sudo:remotehost:
lugar desudo::
(ver más abajo).Como esto todavía usa el mecanismo de proxy debajo,
tramp-default-proxies-alist
ahora debería incluir el valor("remotehost" "root" "/ssh:you@remotehost:")
Lo que significa que el proxy
/ssh:you@remotehost:
se utilizará siempre que solicite un archivo comoroot@remotehost
.root
es el usuario predeterminado para estos métodos, pero, por supuesto, también puede cambiar a un usuario no root con:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETSiempre especifique explícitamente el nombre de host remoto
Probablemente esté acostumbrado a usar
sudo::
usu::
omitir el nombre de host. Si se queda en el host local, esto todavía está bien, pero si está saltando a un servidor remoto, debe especificar el nombre de host para cada salto, incluso si es el mismo que para el salto anterior. Utilice siempresudo:hostname:
osu:hostname:
con hosts remotos.La trampa es que
sudo::
qué aparecen realmente a trabajar - sin embargo cuando se hace eso el anfitrión de la entrada dinámica de proxy será el nombre de host que originó a partir de en vez de que el anfitrión conectado. Esto no solo parecerá confuso (ya que se mostrará el host incorrecto en las rutas de archivo), sino que también significará que cualquier intento posterior de usarlosudo::
en su host local se enviará al servidor remoto. (y presumiblemente el proxy también se vería afectado si hiciera lo mismo en un segundo servidor, lo que provocaría más problemas).En resumen, ¡no lo use
::
cuando tenga varios saltos!fuente
/sudo:hostname:/etc/hosts
, obtengo lo que cabría esperar, pero cuando/sudo:abbrev:/etc/hosts
escribo, aparece el mensaje "La abreviatura del host parece un host remoto, sudo solo puede usar el host local". ¿Es esto reparable?.ssh/config
entradas y no tengo problemas/ssh:abbrev|sudo:abbrev:/etc/hosts
para usar las abreviaturas de mi nombre de host. Parece que no estás saltando primero al anfitrión.tramp-default-proxies-alist
parece ser correcto. Sin embargo, el comportamiento que describí anteriormente persiste. ¿Mi archivo de configuración es incorrecto de alguna manera?/sudo:abbrev:/etc/hosts
como puso en su comentario anterior (que es incorrecto, como se mencionó), o si está usando el correcto/ssh:abbrev|sudo:abbrev:/etc/hosts
. Su archivo de configuración ssh probablemente está bien, ya que evidentemente puede usarlo de otra manera.Actualización : aunque esta respuesta resolvió el problema original, fue escrita para emacs 20 o 21. Para emacs 24, le recomiendo que use la respuesta de phils porque ofrece más explicaciones y está actualizada.
Creo que los nombres de archivo de varios saltos en tramp es lo que estás buscando.
El primer salto sería ssh y el segundo sudo.
Actualización: las versiones recientes de emacs admiten múltiples saltos usando proxies:
Luego invoca abriendo:
fuente
Tuve algunos problemas con la respuesta seleccionada. Sin embargo, funcionó cuando agregué esta línea a .emacs:
Y luego ejecutó lo siguiente:
/sudo:ssh-host:file-on-ssh-host
Fue un poco confuso porque en un momento se me pidió la contraseña de "root", pero al ingresar la contraseña de mi usuario, me concedió acceso. También funciona universalmente en todos los hosts de la red. Además, todavía puedo hacer esto para no ser root:
/ssh:ssh-host:file-on-ssh-host
fuente
abc.xyz.com' looks like a remote host,
sudo 'sólo puede usar el host local" tan pronto como ingrese los segundos dos puntos en "/sudo:abc.xyz.com:". Ideas? Emacs 23.1.1 en Ubuntu 10.04 LTS.Desde la página web de configuración de tramp multi-hops
Entonces cualquiera
abrirá el archivo usando sudo después de iniciar sesión con el mismo nombre de usuario del usuario que ejecuta emacs pero en la máquina remota.
fuente
Primero debe ingresar al servidor mediante SSH, luego debe ejecutar emacs localmente.
O puede usar NFS con no_root_squash, o puede probar con el servidor / cliente emacs, aunque no tengo idea de lo que puede suceder (no use emacs yo mismo)
fuente