Mar 29 2014

TRAMP: Transparent Remote Access, Multiple Protocols + ad-hoc multi-hop

Tag: advancedoverdrive @ 9:31 pm

TRAMP (Transparent Remote Access, Multiple Protocols) se emplea para editar ficheros de manera remota. TRAMP emplea una conexion remota mediante shell (rlogin, telnet, ssh). Puede transferir ficheros usando rcp o algun programa similar o puede codificar el contenido de los ficheros (usando uuencode o base64) y transferirlos mediante la conexion shell.

En GNU/Emacs, como no, tenemos el tramp-mode, que permite usar dicha funcionalidad desde el propio entorno.

Pudiendo asi acceder a ficheros de manera remota de una forma transparente. Ademas se puede emplear sshfs, montando asi un sistema remoto al vuelo mediante ssh o local mount, para una mayor velocidad. Desde emacs se puede emplear en este caso:

sshfs host: localmountpoint

o si el usuario es distinto mediante:

sshfs useratremotehost@host: localmountpoint -o idmapfile,uidfile=uid,gidfile=gid

 En nuestro emacs debemos anadir las siguientes lineas:

(require ‘tramp)
(setq tramp-default-method «ssh»)

Podemos usar los siguientes keybindings para hacer uso de TRAMP:

  • Especificando el host y fichero remoto: C-x C-f /remotehost:filename  RET
  • Especificando el metodo, usuario, host remoto y fichero: C-x C-f /method:usuario@remotehost:filename)
  • Especificando el usuario, host remoto y fichero: C-x C-f /usuario@remotehost:filename
  • Haciendo su para editar ficheros como root de manera local: C-x C-f /su::/etc/hosts
  • Haciendo sudo para editar ficheros como root de manera local: C-x C-f /sudo::/etc/hosts

tramp1

Ejemplo de una conexion editando un fichero remoto con TRAMP

tramp2

Region seleccionada (en rojo) de una vez editado el fichero y modificado, es guardado de la forma tipica con C-x-s.

Si poseemos versiones Emacs 24.3+, podemos emplear ad-hoc multi-hop, que reemplaza a multi de versiones anteriores. qui podemos ver la pagina info de TRAMP en emacs:

C-h i g (tramp) Ad-hoc multi-hops RET

tramp3

Emacs es autodocumentado y desde aqui podemos ver la documentacion de TRAMP

Con la nueva sintaxis, cada hop se separa mediante el simbolo del pipe ‘|‘:

  • Especificando multi-hops: C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

O especificando el usuario en el host remoto (ya que sino por defecto se empleara root):

  • Especificando el usuario remoto en sudo con multihops: C-x C-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

Tambien, debemos tener en cuenta que debemos usar su: o sudo: si estamos haciendo hoping a un servidor remoto, ademas de indicar el hostname para cada hop, incluso si es el mismo que en el hop previo. El uso de su:: y sudo:: se puede emplear cuando no usemos multiples hops.

Si ademas, queremos conectar a un puerto diferente al tipico del ssh, podemos realizarlo de la siguiente manera:

  • Especificando un puerto distinto al 22 por defecto: C-x C-f /ssh:test@host#2222:/tmp

Si queremos activar variables para debuggear problemas empleando tramp, podemos activarlas anadiendo estas lineas a nuestro .emacs:

(setq tramp-debug-buffer t)

(setq tramp-verbose 10)

Para mas informacion sobre TRAMP, se pueden consultar las siguientes webs: