Muchas veces necesitamos transferir archivos de un sistema a otro y queremos hacerlo de la forma más rápida y simple posible.

Si tenemos acceso físico a ambos sistemas, tal vez lo primero que se nos ocurra sea utilizar un pendrive. Siempre que dispongamos de uno de capacidad suficiente para almacenar los archivos que necesitamos transferir (a veces pueden ser muchos gigabytes), y ambos sistemas tengan puerto USB. Al leer esta última oración piensen "qué ridículo, no puede haber una computadora sin puerto USB!!!". Es cierto, el puerto USB es un estándar de facto actualmente, pero ¿qué pasa si alguna de las máquinas es virtual? Es posible utilizar un pendrive, pero se necesita acceso al host, se debe mapear el pendrive en la máquina virtual, interactuar con el software de virtualización... La cosa se torna engorrosa.



Entonces posiblemente la mejor alternativa sea transferir los archivos por red. Aquí hay miles de alternativas, se pueden enviar por mail, transferir por FTP, compartir por samba, utilizar herramientas de almacenamiento en la nube como Dropbox o Google Drive, subir a un servidor de descargas público (por ejemplo rapidshare), etc.

Todas estas alternativas son más o menos amigables y algunas requieren de software o servicios especiales. El uso del correo electrónico es un tanto arcaico y sólo funciona con archivos pequeños, sin contar que requiere un cliente de correo en ambos sistemas. FTP es una excelente alternativa pero requiere que uno de los dos sistemas funcione como servidor FTP, lo que implica que sea necesario disponer de uno o instalarlo, y además muchas personas no están familiarizadas con sus comandos básicos. Taanto samba como las herramientas en la nube son una excelente alternativa, siempre que dispongamos del servicio/aplicación instalado y configurado. Los servidores de descargas públicos funcionan sólo si ambos sistemas tienen acceso a Internet, y el tamaño máximo de archivo es limitado.

Hay una alternativa que funciona siempre* y es scp, "secure copy". scp utiliza SSH tanto para transferir como para autenticar, y provee su mismo nivel de seguridad y encripción.

*NOTA: funciona siempre que al menos uno de los sistemas tenga un servidor SSH (y el otro un cliente SSH). Esto no es problema si se trata de sistemas GNU/Linux relativamente modernos, pero si se trata de algún viejo UNIX que sólo tiene telnet y FTP no queda otra alternativa que usar ftp: man ftp.

Su sintaxis es muy simple, similar a la del comando cp (copy):

scp FUENTE DESTINO

Aunque, a diferencia de cp, los nombres de archivo pueden contener especificación de usuario y host para indicar que el archivo es copiado desde/hacia un host remoto, utilizando la sintaxis:

[[USUARIO@]HOST:]ARCHIVO

Por ejemplo, si deseamos transferir el archivo prueba.txt al servidor con dirección IP 192.168.1.102:

scp prueba.txt pepe@192.168.1.102:~

Se observa que el usuario para autenticar es "pepe", el cual debe existir en el servidor remoto y se debe conocer su contraseña (es solicitada por SCP antes de comenzar la copia). Al utilizar ~ luego de los dos puntos indicamos que copie el archivo en el directorio $HOME del usuario en cuestión, en este caso "pepe", así que presumiblemente el destino será el archivo /home/pepe/prueba.txt en el servidor remoto 192.168.1.102.

Si en el host remoto el servicio SSH escucha en un puerto diferente al 22 (por ejemplo 1234), se debe especificar mediante el parámetro -P:

scp -P 1234 prueba.txt pepe@192.168.1.102:~

Por supuesto es posible utilizar nombres DNS:

scp -P 1234 root@servidor13.pepe.org:/var/log/messages ./

En este caso estamos trayendo el archivo /var/log/messages desde el servidor servidor13.pepe.org autenticado como el usuario "root", y lo estamos copiando al directorio actual (./).

Si omitimos el usuario, scp autentica con el usuario actual en el sistema local. Si estamos logueados como "juan", intentará auteticar al usuario "juan" en el servidor remoto:

scp prueba.txt servidor15.pepe.net:/tmp/p.txt

Al igual que cp, es posible copiar múltiples archivos y directorios de forma recursiva:

scp *.txt pepe@192.168.1.102:/tmp
scp -r /home/pepe/dir1 pepe@192.168.1.102:/tmp

El primer ejemplo copia todos los archivos que se encuentran en el directorio actual cuyo nombre finalice en *.txt. A pesar de que se trata de múltiples copias sólo es necesario ingresar la contraseña del usuario remoto una sola vez. El segundo ejemplo copia recursivamente el directorio /home/pepe/dir1.


Tal vez pueda interesarte


Compartí este artículo