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?
risposta
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.
Se hai il budget per questo, sì :-) –
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 –
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
Utilizza l'autenticazione basata su chiave invece di inserire la password nello script. – slestak
Punto giusto, questo è stato solo un breve esempio per dimostrare che PSCP potrebbe fare il lavoro richiesto :-) –
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
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.
È possibile utilizzare WinSCP .NET assembly da PowerShell per trasferimenti SCP.
Ad esempio vedi http://winscp.net/eng/docs/library_powershell#example
L'esempio utilizza il protocollo SFTP. Per usare SCP, solo modificarlo per:
$sessionOptions.Protocol = [WinSCP.Protocol]::Scp
Anche se il protocollo di sostegno SCP di server, è probabile che supporta anche SFTP. SFTP è una scelta migliore, se hai l'opzione.
Per chiunque stia utilizzando PowerShell versione 3 o successiva, https://github.com/darkoperator/Posh-SSH è un'opzione. –