Copia Segura de un Fichero

Transferencia de Ficheros con ssh

Es posible transferir ficheros y directorios entre máquinas de forma segura - vía ssh - sin hacer uso de ningún programa adicional:

portatil@user:/tmp$ ssh europa 'tar -cvzf - /tmp/*.tex' > eutex.tar.gz
tar: Eliminando la `/' inicial de los nombres
/tmp/modulemaker.tex
/tmp/ModuleMaker.tex
/tmp/module-starter.tex
/tmp/PBP.tex
/tmp/Starter.tex
La idea es que el comando dado como argumento a ssh produce como salida el contenido del fichero que nos interesa transferir. Dicha salida es redirigida en la máquina local a un fichero. Usaremos tar cuando, como en el ejemplo anterior, nos interese transferir un conjunto de ficheros y directorios.

Comprobemos que los ficheros han sido efectivamente transferidos:

portatil@user:/tmp$ tar tvzf eutex.tar.gz
-rw-r--r-- casiano/casiano 9702 2009-03-05 11:49 tmp/modulemaker.tex
-rw-r--r-- casiano/casiano 42178 2009-03-05 11:18 tmp/ModuleMaker.tex
-rw-r--r-- casiano/casiano  3116 2009-03-05 11:39 tmp/module-starter.tex
-rw-r--r-- casiano/casiano  8471 2009-03-05 11:42 tmp/PBP.tex
-rw-r--r-- casiano/casiano  4418 2009-03-05 11:38 tmp/Starter.tex

Transferencia de Ficheros con scp

El protocolo SCP implementa la transferencia de ficheros. El cliente se conecta a la máquina remota usando SSH y solicita la ejecución de un programa servidor (normalmente el mismo programa cliente scp es capaz de funcionar como servidor).

Para la subida de ficheros el cliente alimenta al servidor con los ficheros que deberán ser cargados, incluyendo opcionalmente los atributos básicos como permisos y fechas.

Para las descargas el cliente envía una solicitud indicando los ficheros y directorios que deben ser descargados.

Veamos un ejemplo:

nereida:~> scp mm.c orion:/tmp/
mm.c
La sintáxis de scp es:
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 ... [[user@]host2:]file2
Es posible copiar entre dos máquinas remotas emitiendo la orden desde una tercera máquina:
portatil@user:/tmp$ scp europa:/tmp/prueba.batch nereida:/tmp/prueba.batch
Es posible usar comodines (wildcards), protegiéndolos de la shell local:
portatil@user:/tmp$ scp 'europa:/tmp/*.tex' nereida:/tmp/
Es posible copiar de dos máquinas remotas a una tercera:
pp2@europa:~/Lnet-parscp$ scp orion:Makefile.PL nereida:texput.log beowulf:
pp2@europa:~/Lnet-parscp$ ssh beowulf ls -ltr | tail -2
-rw-r--r--  1 casiano casiano    615 mar 26 13:56 texput.log
-rw-r--r--  1 casiano casiano   1485 mar 26 13:56 Makefile.PL
Hemos copiado desde la máquina orion y desde la máquina nereida diferentes ficheros. La máquina beowulf es la máquina de destino a la que fueron transferidos.

La opción -r permite copiar subdirectorios. La opción -p permite preservar permisos.

Edición de Ficheros Remotos con vim via scp

Un comando como este edita dos ficheros en sendos tabs:

vi -p scp://orion/AUTOMATICBACKUPCHECKOUT /home/casiano/europabackup.log

El primero es un fichero ~/AUTOMATICBACKUPCHECKOUT en una máquina remota con nombre orion. El segundo es un fichero local. El editor vim emite el comando scp apropiado para copiar el fichero remoto en un fichero temporal.

Durantre la edición, cada vez que salve el fichero ~/AUTOMATICBACKUPCHECKOUT de orion, vim tasladará la orden :w en el comando scp adecuado:

:!scp -q '/tmp/v611122/1' 'orion:AUTOMATICBACKUPCHECKOUT'

o bien podemos emitir una orden de edición de un nuevo fichero remoto:

:vsplit scp://casiano@some.machine.com/somefile.txt

Es incluso posible ver los contenidos de un directorio:

:tabedit scp://orion/pp2/

El Módulo Perl Net::SCP

Entre otros, el módulo Net::SCP permite tener una API de acceso a las funcionalidades de scp:

pp2@nereida:~$ perl -MNet::SCP -wde 0
main::(-e:1):   0
  DB<3> $scp = Net::SCP->new({ host => "machine", user => "loginname" } )
  DB<4> $scp->put("hello.txt", "helloremote.txt") or die $scp->{errstr}
  DB<5> q
pp2@nereida:~$ ssh loginname@machine ls -ltr | tail -1
-rw-r--r--   1 loginname loginname          12 2007-03-21 12:46 helloremote.txt
pp2@nereida:~$ ssh loginname@machine cat helloremote.txt
hello machine



Subsecciones
Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19