Enviar o ficheiro para SFTP usando o 'PowerShell'

Pediram-nos para configurar um upload automático de um dos nossos servidores para um site SFTP. Haverá um arquivo que é exportado de um banco de dados para um arquivo Todas as segundas-feiras de manhã e eles querem que o arquivo seja carregado para SFTP na terça-feira. O método de autenticação atual que estamos usando é o nome de usuário e senha (Eu acredito que havia uma opção para ter o arquivo chave também, mas a opção username/senha foi escolhida).

A forma como estou a imaginar isto é ter um guião sentado num servidor que será despoletado pelo programador de Tarefas do Windows para executar em uma hora específica (terça-feira) que irá pegar o arquivo em questão enviá-lo para o SFTP e, em seguida, movê-lo para um local diferente para fins de backup.

por exemplo:

  • Pasta Local: C:\FileDump

  • pasta SFTP: /Outbox/

  • Pasta De Cópias De Segurança: C:\Backup

eu tentei algumas coisas neste momento WinSCP sendo um deles, bem como SFTP PowerShell Snap-In mas nada funcionou comigo até agora.

isto estará a correr no Windows Server 2012R2.
Quando eu executar Get-Host a minha versão para console é 4.0.

Obrigado.

Author: Martin Prikryl, 2016-08-03

3 answers

Não existe actualmente um método de PowerShell integrado para fazer a parte SFTP. Vais ter de usar algo como psftp.EXE ou um módulo PowerShell como Posh-SSH.

Aqui está um exemplo usando Posh-SSH:

# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)

# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'

# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'

# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH

# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential

# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath

#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }

# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath

Algumas notas adicionais:

  • Você terá que baixar o módulo Posh-SSH que você pode instalar para o seu diretório do módulo de usuário (e.g. C:\Users\jon_dechiro\Documents\WindowsPowerShell\Modules) e apenas carregar usando o nome ou colocá-lo em qualquer lugar e carrega-o como eu tenho no código acima.
  • se ter as credenciais no script não for aceitável você terá que usar um arquivo credencial. Se você precisar de ajuda com isso eu posso atualizar com alguns detalhes ou apontá-lo para alguns links.
  • mude os caminhos, IPs, etc. quando necessário.
Isso deve dar-te um bom ponto de partida.
 18
Author: Jon Dechiro, 2018-04-10 23:39:17
Não nos disse que problema tem com o WinSCP, por isso só posso repetir o que está na documentação do WinSCP.
  • telecarregamento WinSCP. net assembly .
    O último pacote a partir de Agora é WinSCP-5.13.4-Automation.zip;
  • extrair O arquivo .zip ao longo do seu programa;
  • Use um código como este (baseado no exemplo Oficial de envio de PowerShell ):

    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"
    
    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "example.com"
        UserName = "user"
        Password = "mypassword"
        SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
    }
    
    $session = New-Object WinSCP.Session
    
    try
    {
        # Connect
        $session.Open($sessionOptions)
    
        # Upload
        $session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check()
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }
    

Você pode ter o WinSCP a gerar o PowerShell programa para o envio para si:

Você vai obter um código como acima com todas as configurações de sessão e transferência preenchidas.

Generate transfer code dialog

(sou o autor do WinSCP)

 33
Author: Martin Prikryl, 2018-08-31 13:38:55

Usando o pscp do PuTTY.exe (que tenho numa pasta $env:path):

pscp -sftp -pw passwd c:\filedump\* user@host:/Outbox/
mv c:\filedump\* c:\backup\*
 3
Author: TessellatingHeckler, 2016-08-03 05:09:07