SmythSys IT Consulting

Cómo transferir ficheros por SSH desde Windows por línea de comandos con SCP.

La situación que queremos abarcar hoy es la siguiente: tenemos un servidor Linux al que hemos hecho que sólo se pueda conectar con SSH por seguridad. Y queremos transmitir ficheros desde un ordenador Windows. ¿Cómo lo hacemos?

Muchos de los que leeréis esto diréis, fácil, la mayoría de los clientes FTP permiten conexiones SFTP. Cierto, pero eso es en el caso sencillo de usuario y contraseña o archivo de claves. Cierto, y sencillo. Pero hoy vamos a ver el caso en que necesitemos usar la línea de comandos. O bien porque se quieren reealizar procesos batch, o porque queremos situaciones más complejas en que queremos especificar puertos, nombres de usuario etc distintos (por ejemplo), al del archivo de claves.
Para que os hagáis una idea, el caso que nos hizo usar esto en vez de SFTP era uno en que teníamos que conectarnos a un servidor a través de otro por un túnel. El túnel requería una archivo de claves con un usuario y el segundo servidor otro usuario. Por lo tanto excede de las capacidades de los clientes de FTP.

Cómo transferir ficheros por SSH desde Windows por terminal con SCP.

Lo primero que tenemos que hacer es descargar PSCP, un programa de los creadores de Putty y Puttygen. Para ello vamos a https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html y descargamos la versión que PSCP que corresponda.

El cliente de SCP (Secure Copy Protocol), PSCP, no requiere instalación, se ejecuta desde el terminal. El uso básico es muy sencillo:

Copiar fichero a un servidor.

pscp c:\rutaorigen\ficheroacopiar.xxx usuario@servidorourl.com:/rutadestino/nombredestino.xxx

Y pedirá la contraseña del usuario.

Copiar fichero de un servidor a mi ordenador.

pscp usuario@servidorourl.com:/rutadestino/* esto copia todo el contenido de la carpeta rutadestino a la carpeta de mi PC desde la que ejecuto el programa.

Vamos a ver algún ajuste que se puede hacer a esto:

P port : especifica el puerto.
Por ejemplo pscp -P 2022 c:\rutaorigen\ficheroacopiar.xxx usuario@servidorourl.com:/rutadestino/nombredestino.xxx usaría el puerto 2022.

pw contraseña: especifica la contraseña.
Por ejemplo pscp c:\rutaorigen\ficheroacopiar.xxx usuario@servidorourl.com:/rutadestino/nombredestino.xxx -pw 1234 conecta con la contraseña 1234. Recordad que no es nada recomendable poner contraseñas en los script.

-l : especifica un usuario. Ver ejemplo de varios servidores debajo.

-r: copia los directorios de manera recursiva.

– i ficherodeclave: especifica un fichero de clave privada para identificarse.
Por ejemplo pscp -i "c:\rutadetuficherodeclaves\fichero.ppk" c:\rutaorigen\ficheroacopiar.xxx usuario@servidorourl.com:/rutadestino/nombredestino.xxx

– h: especifica el host desde un fichero. Útil para copiar ficheros a varios servidores (ver ejemplo debajo).

Dos ejemplos curiosos combinando lo anterior.

  1. Conexión a través del puerto 8022 (por un túnel por eso por otro puerto y al 127.0.0.1) , con un fichero de claves a un servidor con un usuario diferente al del fichero de claves

    pscp.exe -P 8022 -i "C:\abucacionarchivodeclaves\arvhicodeclaves.ppk" C:\ubicacionfichero\fichero.txt usuarioremoto@127.0.0.1:/rutaremota 
  2. Copiar el mismo fichero a varios servidores que tienen el mismo usuario y contraseña

    Creamos un fichero, por ejemplo archivodeservidores.txt con los servidores destino puestos así:
192.168.0.5:22
192.168.0.12:22
80.53.22.1:22

Luego ejecutamos lo siguiente.

pscp -h archivodeservidores.txt -l usuario fichero.tar.gz /directoriodestino/

Esperamos que con esto podáis jugar y copiar ficheros en varias situaciones por SCP.

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).