2013-08-20 16 views
15

Ho bisogno di scrivere uno script che trasferisce i file da una cartella su un altro server (Linux), ma lo script che trasferisce i file è su Windows e mi chiedevo se esistesse un'alternativa a scp per PowerShell (o se ce n'era un'altra modo di farlo)Esiste un'alternativa SCP per PowerShell?

+0

Per chiunque stia utilizzando PowerShell versione 3 o successiva, https://github.com/darkoperator/Posh-SSH è un'opzione. –

risposta

7

pscp.exe è una valida opzione, ma ho utilizzato una libreria da Rebex per un paio di anni a questa parte per i trasferimenti SFTP e FTPS i n entrambe le app C# e gli script PowerShell con grande successo. Il loro pacchetto include anche an SCP object ma non l'ho usato personalmente.

È gratuito rispetto allo pscp. Prima di selezionare il pacchetto Rebex, avevo preso in considerazione l'idea di seguire la rotta PuTTY ma il mio team ha deciso che avere una libreria in cui potevamo facilmente eseguire il rollover in qualsiasi app/script era proficua a lungo termine.

+0

Se hai il budget per questo, sì :-) –

+0

Questo post del blog può aiutarti a ottenere Rebex SFTP in esecuzione in PowerShell http://blog.rebex.net/news/archive/2008/ 25/09/how-to-use-FTP-o-SFTP-in-PowerShell.aspx –

16

C'è un piccolo strumento pratico che viene fornito con Putty chiamato pscp.exe che farà questo e può essere chiamato in PowerShell facilmente.

Esempio sotto copie da Windows a una scatola di CentOS (accesso al sistema come usercode "disegno di legge") e si utilizza l'opzione -pw in pscp di passare a una password (in caso contrario la finestra di comando che viene generato richiederà la password di Linux):

Start-Process 'C:\Program Files (x86)\PuTTY\pscp.exe' -ArgumentList ("-scp -pw password C:\Document.rtf [email protected]:/home/bill/") 

PuTTY Secure Copy client 
Release 0.62 
Usage: pscp [options] [[email protected]]host:source target 
     pscp [options] source [source...] [[email protected]]host:target 
     pscp [options] -ls [[email protected]]host:filespec 
Options: 
    -V  print version information and exit 
    -pgpfp print PGP key fingerprints and exit 
    -p  preserve file attributes 
    -q  quiet, don't show statistics 
    -r  copy directories recursively 
    -v  show verbose messages 
    -load sessname Load settings from saved session 
    -P port connect to specified port 
    -l user connect with specified username 
    -pw passw login with specified password 
    -1 -2  force use of particular SSH protocol version 
    -4 -6  force use of IPv4 or IPv6 
    -C  enable compression 
    -i key private key file for authentication 
    -noagent disable use of Pageant 
    -agent enable use of Pageant 
    -batch disable all interactive prompts 
    -unsafe allow server-side wildcards (DANGEROUS) 
    -sftp  force use of SFTP protocol 
    -scp  force use of SCP protocol 
+1

Utilizza l'autenticazione basata su chiave invece di inserire la password nello script. – slestak

+0

Punto giusto, questo è stato solo un breve esempio per dimostrare che PSCP potrebbe fare il lavoro richiesto :-) –

+0

Windows noob qui. Quando faccio questo, ottengo solo una finestra vuota della console che scompare dopo circa 10 secondi e il trasferimento SCP non sembra essersi verificato. Qualche idea su cosa potrebbe succedere? – jayhendren

1

V'è anche un modo "NET friendly":

è possibile utilizzare la SharpSSH dll per eseguire i comandi ssh, e fare tranfers SCP/SFTP.

Ad esempio:

[Reflection.Assembly]::LoadFrom((Resolve-Path .\Tamir.SharpSSH.dll)) 

$ssh = New-Object Tamir.SharpSsh.Sftp("server","user","password") 

$ssh.Connect() 

$ssh.Put("C:\localfile","distantfile") 

$ssh.Close() 

C'è la biblioteca SSH.Net, anche, lo fa approssimativamente le stesse cose.