Mar 29
TRAMP: Transparent Remote Access, Multiple Protocols + ad-hoc multi-hop
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
Ejemplo de una conexion editando un fichero remoto con TRAMP
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
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:
- TRAMP tutorial: http://www.gnu.org/software/tramp/
- Emacs wiki, tramp-mode: http://www.emacswiki.org/emacs/TrampMode