Subir o descargar archivos o carpetas desde Windows a Linux con Powershell

por | 18/08/2018

Enviar archivos desde Windows a Linux con Powershell. Descargar archivos desde Linux a Windows con Powershell.

En ocasiones necesitamos enviar o recibir archivos o carpetas automáticamente desde un servidor Windows a un servidor Linux. Os mostraré como poder hacer esto automáticamente mediante Powershell. El siguiente ejemplo nos servirá tanto para servidores Windows con para Windows 10.

Para ello necesitaremos instalar el módulo llamado Posh-SSH que nos permite usar las funcionalidades SSH y SCP hacia equipos remotos. Para poder instalarlo en Powershell, necesitaremos la versión 3.0 de powershell.

Procedemos a instalarlo con el comando:

Install-Module –Name Posh-SHH

También podemos descárgalo de:

https://www.powershellgallery.com/packages/Posh-SSH/2.0.2

Nos avisa que si queremos instalar el módulo desde un repositorio untrusted. Diremos que sí.

Los comandos que vamos a usar son los siguientes:

  • Set-SCPFile (Subir un archivo)
  • Get-SCPFile (Descargar un archivo)
  • Set-SCPFolder (Subir una carpeta o directorio y su contenido)
  • Get-SCPFolder (Descargar una carpeta o directorio y su contenido)

El comando a usar será de la siguiente manera:

Set-SCPFile –ComputerName “IP o fqdn” –Port (si usamos el puerto 22 no hace falta especificarlo) –RemotePath “ruta en servidor remoto donde subir el fichero” –LocalFile “ruta en nuestro servidor local del archivo a copiar”

Hacemos una prueba de conexión

Y nos pedirá las credenciales para conectarnos al servidor remoto.

Haremos una prueba.

Le hemos pasado como –Credentials al usuario root, pues nos pide el password de root.

Como ejemplo vamos a subir a nuestro servidor Linux un archivo llamado test1.txt

Comprobaremos que nuestro servidor ha recibido el archivo.

Ahora lo descargaremos test.txt desde nuestro servidor Linux a nuestro servidor Windows en c:\temp

Y vemos que nos lo ha descargado correctamente.

Para subir o descargar una carpeta o directorio funciona exactamente igual.

Si queremos omitir que nos pida credenciales, podremos crear un objeto que adquiera las credenciales desde un fichero cifrado. Para ello haremos lo siguiente.

$nombreobjeto = Get-Credential

Y automáticamente nos pedirá usuario y password. Introducimos las credenciales del servidor remoto para no tener que introducirlas cada vez y automatizar el proceso.

A continuación, vamos a exportar las credenciales a un fichero xml con el password encriptado.

Usaremos lo siguiente:

$nombreobjeto | Export-Clixml –Path “Ruta donde guardar el password.xml”

Si abrimos el archivo xml generado veremos que nuestro password estará encriptado.

Ya solamente tendremos que crear un archivo Powershell .ps1 para recuperar nuestras credenciales, incluirlas en un objeto y lanzar el comando con las credenciales. El archivo en cuestión sería así:

$object = Import-CliXml -Path 'C:\temp\credenciales.xml'
Get-SCPFolder -ComputerName 'IP' -Credential $object -Port 2222 -RemoteFolder '/home/user/' -LocalFolder 'D:\local'

 

 

Con esto podremos crear una tarea programada para lanzar nuestro script de powershell y tenelo todo automatizado.

 

Saludos

Norman trabaja como Administrador de Sistemas con más de 8 años de experiencia en entornos Windows, Linux, VMware, SAN, Redes. | MCITP | CCNA | VCP |

No votes yet.
Please wait...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *