Есть ли альтернатива SCP для PowerShell?

Мне нужно написать script, который переносит файлы из папки на другой сервер (Linux), но script, который переносит файлы на окна, и мне было интересно, есть ли альтернатива scp для PowerShell (или если был другой способ сделать это)

Ответы

Ответ 1

pscp.exe - жизнеспособный вариант, но я уже несколько лет использую библиотеку из Rebex для SFTP и FTPS с большим успехом переводится как в приложениях С#, так и в сценарии PowerShell. Их пакет также включает объект SCP, но я лично его не использовал.

Это бесплатно, чем pscp. Прежде чем выбрать пакет Rebex, я подумал о том, чтобы идти по маршруту PuTTY, но моя команда решила, что наличие библиотеки, которую мы могли бы легко загрузить в любое приложение /script, стоило в долгосрочной перспективе.

Ответ 2

Есть удобный небольшой инструмент, который поставляется с Putty под названием pscp.exe, который сделает это и может быть вызван в powershell легко.

Пример ниже: копии из окна в поле CentOS (вход в систему как счет пользователя), и вы используете переключатель -pw в pscp для передачи пароля (в противном случае окно команды, которое порождено, будет запрашивать пароль для 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

Ответ 3

Вы можете использовать сборку WinSCP.NET из PowerShell для передач SCP.

Например, см. http://winscp.net/eng/docs/library_powershell#example

В этом примере используется протокол SFTP. Чтобы использовать SCP, просто измените его на:

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

Хотя если ваш сервер поддерживает протокол SCP, вероятно, он также поддерживает SFTP. SFTP - лучший выбор, если у вас есть опция.

Ответ 4

Существует также "дружественный к .NET" способ:

Вы можете использовать dll SharpSSH для выполнения команд ssh и передачи scp/sftp.

Например:

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

Есть библиотека SSH.Net, которая делает примерно то же самое.