2013-08-20 38 views
15

Potrzebuję napisać skrypt, który przesyła pliki z folderu na inny serwer (Linux), ale skrypt, który przenosi pliki jest w systemie Windows, i zastanawiałem się, czy istnieje alternatywa dla scp dla PowerShell (lub jeśli był inny sposób wykonania tej czynności)Czy istnieje alternatywa SCP dla PowerShell?

+0

Dla każdego, kto używa PowerShell w wersji 3 lub nowszej, https://github.com/darkoperator/Posh-SSH jest opcją. –

Odpowiedz

7

pscp.exe jest realną opcją, ale byłem przy użyciu biblioteki z Rebex przez kilka lat na transfery i SFTP i FTPS n zarówno aplikacje C#, jak i skrypty PowerShell z dużym sukcesem. Ich pakiet zawiera także an SCP object, ale ja osobiście go nie użyłem.

To kosztuje, w przeciwieństwie do pscp jest bezpłatna. Zanim wybrałem pakiet Rebex, rozważałem przejście na trasę PuTTY, ale mój zespół zdecydował, że posiadanie biblioteki, z której moglibyśmy w łatwy sposób przetworzyć dowolną aplikację/skrypt, było warte zachodu.

+0

Jeśli masz budżet na to, tak :-) –

+0

Ten wpis na blogu może pomóc ci w uruchomieniu Rebex SFTP w PowerShell http://blog.rebex.net/news/archive/2008/ 09/25/how-to-use-FTP-or-SFTP-in-PowerShell.aspx –

16

Jest to poręczne małe narzędzie, które jest dostarczane z Putty o nazwie pscp.exe, które zrobi to i będzie można łatwo wywołać w programie Power Shell.

Przykład poniżej kopii z Windows na pole CentOS (zalogowaniu się jako userCode „Bill”) i użyć przełącznika w pscp-pw przejść w haśle (inaczej oknie poleceń, które zrodził poprosi o hasło 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

Używaj uwierzytelniania opartego na kluczach zamiast umieszczać hasło w swoim skrypcie. – slestak

+0

Fajny punkt, to był tylko krótki przykład pokazujący, że PSCP może wykonać zlecone zadanie :-) –

+0

Windows noob tutaj. Kiedy to zrobię, otrzymuję puste okno konsoli, które znika po około 10 sekundach, a transfer SCP wydaje się nie występować. Wszelkie pomysły co do tego, co się dzieje? – jayhendren

1

Jest też „NET przyjazny” sposób:

można użyć dll SharpSSH wykonywanie poleceń ssh, i robić przelewy SCP/SFTP.

Na przykład:

[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() 

Jest biblioteka SSH.Net też robi approximatively te same rzeczy.