Poneos en situación: estamos en un entorno corporativo con máquinas Linux y necesitamos transferir ficheros entre dos de ellas pero no disponemos de ningún protocolo de transferencia habitúal. No tenemos (o no queremos usar) el infame SMB/CIFS (Samba para los amigos), no hay NFS, no tenemos acceso FTP y por supuesto que no tenemos acceso físico a la máquina destino de las transferencias. Sólo disponemos de una conexión SSH con la misma ¿cómo lo hacemos?
La primera opción implica una cierta preparación previa: que la máquina destino (supondremos siempre que tenemos acceso local a la máquina origen) tenga una copia de netcat, esa llamada «navaja suiza» del TCP/IP. Para hacer la transferencia lo primero es poner en escucha una instancia de netcat en la máquina destino. Así:
jmmoralesv@barbara:/tmp$ netcat -v -l -p 6969 > googlemapsapi.pdf
listening on [any] 6969 ...
Inmediatamente después lanzamos la copia desde la máquina origen de esta forma:
jmmoralesv@eduardita:~> cat googlemapsapi.pdf | netcat barbara 6969
La máquina destino recibe correctamente el fichero y cierra la sesión:
connect to [xxx.xxx.xxx.xxx] from eduardita [xxx.xxx.xxx.xxx] 43900
googlemapsapi.pdf
jmmoralesv@barbara:/tmp$ ls -l
total 924
-rw-r--r-- 1 jmmoralesv jmmoralesv 428445 2006-10-05 12:00 googlemapsapi.pdf
Evidentemente no tenemos que pasar los ficheros uno a uno ;-). Si queremos pasar un directorio completo la secuencia sería la siguiente: Primero levantamos de esta forma la escucha en la máquina destino:
jmmoralesv@barbara:/tmp$ netcat -v -l -p 6969 | tar xv
listening on [any] 6969 ...
Y luego lanzamos la copia desde el origen así:
jmmoralesv@eduardita:~> tar cf - pdfs | netcat barbara 6969
Ahora ‘recogemos’ los resultados:
connect to [xxx.xxx.xxx.xxx] from eduardita [xxx.xxx.xxx.xxx] 49810
pdfs/
pdfs/fungibles 8550.pdf
pdfs/googlemapsapi.pdf
pdfs/GuiaWebVersionDefinitiva.pdf
jmmoralesv@barbara:/tmp$ ls -lR
.:
total 4
drwxr-xr-x 2 jmmoralesv jmmoralesv 4096 2006-10-05 12:30 pdfs
./pdfs:
total 1904
-rw-r--r-- 1 jmmoralesv jmmoralesv 860160 2006-10-05 12:22 fungibles 8550.pdf
-rw-r--r-- 1 jmmoralesv jmmoralesv 428445 2006-10-05 12:00 googlemapsapi.pdf
-rw-r--r-- 1 jmmoralesv jmmoralesv 644674 2006-08-03 10:48 GuiaWebVersionDefinitiva.pdf
La segunda opción que veremos no requiere más que de la conexión ssh con la máquina destino.
jmmoralesv@eduardita:~> tar czv googlemapsapi.pdf | ssh barbara tar xz -C /tmp
googlemapsapi.pdf
Password:
Igualmente podemos transferir un directorio completo:
jmmoralesv@eduardita:~> tar czv pdfs | ssh barbara tar xz -C /tmp
pdfs/
pdfs/fungibles 8550.pdf
pdfs/googlemapsapi.pdf
pdfs/GuiaWebVersionDefinitiva.pdf
Password:
O, incluso, invertir los términos y traernos uno o varios ficheros desde la máquina destino a la origen:
jmmoralesv@eduardita:~> ssh barbara tar cz /tmp/pdfs | tar xz -C .
Password:
La última opción consiste en montar directamente un directorio de la máquina destino sobre nuestro sistema de ficheros gracias a sshfs. En la máquina destino no necesitamos hacer ningún preparativo previo: sólo contar con el servicio SSH. En la máquina origen debemos de instalar previamente los paquetes fuse
y sshfs
. Una vez hecho esto levantamos el módulo de fuse y, sin mas, montamos el directorio que deseamos sobre nuestro sistema de la siguiente forma:
jmmoralesv@eduardita:~> sudo modprobe fuse
Contraseña:
jmmoralesv@eduardita:~> sshfs jmmoralesv@barbara:/tmp /mnt/barbara
Password:
jmmoralesv@eduardita:~> ls -l /mnt/barbara
total 424
-rw-r--r-- 1 jmmoralesv 1000 428445 2006-10-05 12:44 googlemapsapi.pdf
drwxr-xr-x 1 jmmoralesv 1000 4096 2006-10-05 12:36 pdfs
jmmoralesv@eduardita:~>
Por último, para desmontar la unidad:
jmmoralesv@eduardita:~> sudo umount /mnt/barbara
root's password:
jmmoralesv@eduardita:~> ls /mnt/barbara -l
Referencias y ampliaciones en: