SSH/TransferFiles . linux data remote


 

Parent page: Internet and Networking >> SSH

Another important function of SSH is allowing secure file transfer using SCP and SFTP.

Secure Copy (scp)

 

Just as all modern Unix-like systems have an SSH client, they also have SCP and SFTP clients. To copy a file from your computer to another computer with ssh, go to a command-line and type:

scp <file> <username>@<IP address or hostname>:<Destination>

 

For example, to copy your TPS Reports to Joe’s Desktop:

scp "TPS Reports.odw" joe@laptop:Desktop/

 

This will copy TPS Reports.odw to /home/joe/Desktop, because SCP uses your home folder as the destination unless the destination folder begins with a ‘/’.

To copy the pictures from your holiday to your website, you could do:

scp -r /media/disk/summer_pics/ mike@192.168.1.1:"/var/www/Summer 2008/"

 

The -r (recursive) option means to copy the whole folder and any sub-folders. You can also copy files the other way:

scp -r catbert@192.168.1.103:/home/catbert/evil_plans/ .

 

The ‘.’ means to copy the file to the current directory. Alternatively, you could use secret_plans instead of ‘.’, and the folder would be renamed.

Secure FTP (sftp)

 

Finally, if you want to look around the remote machine and copy files interactively, you can use SFTP:

sftp linus@kernel.org

 

This will start an SFTP session that you can use to interactively move files between computers.

SSHFS

 

SSHFS is a recent addition to Linux that allows you to make a remote filesystem available over SSH act as if it was inside a folder on your own system. See SSHFS for details.

GNOME

 

Click File -> Connect to Server. Select SSH for Service Type, write the name or IP address of the computer you’re connecting to in Server. Click Add Bookmark if you want to make the connection available later in the Places sidebar. There are options to login as a different User Name, on a different Port number, and use a different default Folder.

Files can be copied by dragging and dropping between this window and other windows.

KDE

 

Open Konqueror, and in the address bar type:

fish://username@server_address

 

Files can be copied by dragging and dropping them between this window or tab and to other windows or tabs.

Using other programs

 

SecPanel and PuTTY also have file transfer utilities, although they’re generally not as easy to use as the ones discussed above.

Nota: Antes de nada aclarar que con FTP puedes transferir archivos con un cliente de FTP que te facilita mucho la vida. Por línea de comandos con scp la verdad es que es bastante más engorroso, pero a veces no hay otro remedio. Con FTP solo puedes descargar o enviar archivos en las carpetas habilitadas para ello. A veces los archivos los quieres poner en otra localización, o tienes que descargar archivos que no están en una ruta accesible por FTP. No habría problema, puesto que accediendo por SSH podrías copiar los archivos que deseas descargar en la ruta alcanzable mediante FTP. O si lo que necesitas es subir archivos, simplemente los subes donde FTP te lo permita y luego los mueves desde SSH hacia la carpeta donde realmente los necesitas. Esto es lo que suelo hacer yo en mi día a día, siempre que en el servidor se pueda hacer FTP. Este artículo te ofrece una vía alternativa para cuando no tienes FTP.

Comando scp

El comando scp está disponible tanto en Linux como en Mac. Si estás usando Windows seguro que hay alguna forma también de usar ese comando. Yo ahora mismo la desconozco, pero sé que hay un software (no lo he probado nunca) que se llama WinSCP que te puede hacer esta tarea también, incluso con una interfaz gráfica.

El comando es muy sencillo de usar, simplemente indicamos el archivo origen, con su ruta y el archivo destino, con su ruta también. El tema es lidiar con la conexión con el servidor remoto, que nos hace que se complique un poco la sintaxis.

Internamente las conexiones de scp se realizan por un túnel SSH, por lo que, para referenciar el servidor remoto, usaremos los mismos datos de conexión que venimos usando para conectarnos por SSH.

Podemos ver mediante unos ejemplos cómo funciona este comando.

Nota: Según nos comentan entre los comentarios (gracias dolphinziyo) existe un programa en Windows llamado WinSCP, un cliente que emplea SSH para enviar archivos como si fuera por el tradicional FTP. Puede estar muy bien para quien esté trabajando en este sistema y no le guste operar por la línea de comandos.

Subir un archivo desde local al servidor remoto

Supón que tienes un archivo en tu máquina local y lo quieres transferir a un servidor remoto. Usas el comando con la siguiente sintaxis.

scp nombre_archivo usuario@servidor:ruta_servidor_donde_colocar_archivo

Recuerda que la conexión se realiza por ssh, imagina que tu servidor se llama “example.com” y el usuario con el que te conectas a la máquina es “root”. Imagina que el archivo que intentas subir se llama “archivo_a_subir.zip” y que lo quieres dejar en la carpeta /var/www/example.com del servidor remoto.

scp archivo_a_subir.zip root@example.com:/var/www/example.com/

El nombre del server también podría ser perfectamente una dirección IP y por supuesto, el usuario no tiene por qué ser root.

scp otro_archivo_a_subir.js miusuario@112.223.4.215:/otra/carpeta/destino/

Descargar un archivo desde un servidor remoto a nuestro ordenador local

Este segundo caso es casi idéntico, solo que intercambiamos el origen y el destino. Las explicaciones dadas hasta ahora son básicamente las mismas.

scp usuario@servidor:ruta_servidor_donde_esta_el_archivo ruta_ordenador_local_donde_poner_el_archivo

Con datos de conexión similares a los de antes, el comando nos saldría como este:

scp root@example.com:/var/www/example.com/archivo_a_descargar.html archivo_a_descargar_nombre_en_local.html

Hay algunas opciones útiles para trabajar con el comando scp, puedes acceder a la ayuda con el comando “man scp”. Comparto contigo una opción que uso bastante para realizar la copia de todos los archivos de una carpeta, de manera recursiva, copiando también el contenido de las subcarpetas. La opción es -r.

scp -r root@161.0.0.1:/var/www/desarrolloweb.com/carpeta/ ruta_destino_en_local/

Esto te copiará todos los archivos que en el servidor remoto encuentras en la ruta “/var/www/desarrolloweb.com/carpeta/“ (incluso con las carpetas que puedas encontrar en esa ruta). Los descargará y se colocarán en tu ordenador local en la carpeta “ruta_destino_en_local”.

Espero que con estas notas puedas usar sin problemas tu línea de comandos para transferir archivos al servidor de forma segura, por scp, usando un túnel SSH, algo que seguramente tendrás que incorporar tarde o temprano en tus flujos de trabajo para desarrollo en la web.