Есть ли альтернатива 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, которая делает примерно то же самое.