Is there a SCP alternative for PowerShell?

China☆狼群 提交于 2019-11-30 21:49:49

问题


I need to write a script that transfers files from a folder onto another server (Linux), but the script that's transferring files is on windows, and I was wondering if there was an alternative to scp for PowerShell (or if there was another way of doing this)


回答1:


pscp.exe is a viable option, but I have been using a library from Rebex for a couple years now for SFTP and FTPS transfers in both C# apps and PowerShell scripts with great success. Their package also includes an SCP object but I haven't personally used it.

It does cost money vs. pscp being free. Before selecting the Rebex package, I had considered going the PuTTY route but my team decided that having a library we could easily roll into any app/script was worthwhile in the long term.




回答2:


There is a handy little tool that comes with Putty called pscp.exe that will do this and can be called in powershell easily.

Example below copies from windows to a CentOS box (logging in as the usercode "bill") and you use the -pw switch in pscp to pass in a password (otherwise the command window that is spawned will prompt for the Linux password):

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

PuTTY Secure Copy client
Release 0.62
Usage: pscp [options] [user@]host:source target
       pscp [options] source [source...] [user@]host:target
       pscp [options] -ls [user@]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



回答3:


You can use WinSCP .NET assembly from PowerShell for SCP transfers.

For example see http://winscp.net/eng/docs/library_powershell#example

The example uses SFTP protocol. To use SCP, just modify it to:

$sessionOptions.Protocol = [WinSCP.Protocol]::Scp

Though if your server support SCP protocol, it's likely it also supports SFTP. SFTP is better choice, if you have the option.




回答4:


There is also a ".NET friendly" way:

you can use the SharpSSH dll to execute ssh commands, and do scp/sftp tranfers.

For example:

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

There is the SSH.Net library, too, it does approximatively the same things.



来源:https://stackoverflow.com/questions/18344004/is-there-a-scp-alternative-for-powershell

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!