我需要在Windows机器上使用SFTP将文件放在远程目录中。我已经尝试了Net::SFTP::Foreign
虽然我无法使用它,因为它需要IO::Pty
,这在Windows机器上是不可用的。什么是最好/最简单的方法?
使用请求信息进行更新:
以下是我正在使用的版本:
Net::SFTP::Foreign
:v 1.89
Net::SSH2
:v 0.69
Net::SFTP::Foreign::Backend::Net_SSH2
:v 0.09
这是我的代码的要点:
$ssh2 = Net::SSH2->new();
$ssh2->connect($host) || die "connect failed";
$ssh2->auth_password($user, $pass) || die "password auth failed";
$sftp = Net::SFTP::Foreign->new(ssh2 => $ssh2,
backend => 'Net_SSH2');
$sftp->error and
die "Unable to stablish SFTP connection: ". $sftp->error;
现在我只是想建立一个连接。我需要将文件放在服务器上。我收到的错误如下:
Net::SSH2::timeout(ss, timeout) at C:/Strawberry/perl/site/lib/Net/SSH2.pm line 111, <STDIN> line 1.
答案 0 :(得分:3)
在Windows中使用Net::SFTP::Foreign的首选方法可能是使用Net::SFTP::Foreign::Backend::Net_SSH2后端(更新:CPAN提供的Perl模块),后者使用Net::SSH2在引擎盖下(已经包含在Strawberry Perl中,更新:否则,您将需要自己构建和安装libssh2,这有时并不容易)。
另一个选择是tell Net::SFTP::Foreign
使用plink
命令运行SSH连接(在模块文档上搜索plink
)。 更新:plink
是PuTTY
应用程序发行版的一部分,这是一个非常流行的SSH客户端,可能已安装在该计算机中。
最后,您还可以尝试使用Net::SSH::Any为Net::SFTP::Foreign
提供自己的后端,并且可以在多个SSH客户端和模块之上运行......但它仍处于测试阶段!
答案 1 :(得分:2)
我有几个跨平台脚本使用Net :: SFTP :: Foreign使用windows上的plink和linux上的openssh,它运行良好。 Windows正在使用最新的草莓perl版本。
my $sftp = Net::SFTP::Foreign->new(
host=> $server,
ssh_cmd => $plink, #Contains full path to plink or path to ssh
user=> $user,
more => ['-i', $keyfile],
stderr_discard => 1,
);
使用plink后端的唯一方法是你必须首先使用psftp或Putty gui手动建立连接,以便将信任确认存储在注册表中。之后,最好从脚本开始。
好消息是,您可以在系统级配置文件中定义ssh或plink的实际路径,并且脚本只读取该特定平台上所需的内容。即(... \ bin \ Putty \ plink.exe或/ usr / bin / ssh)
不是纯粹的Perl解决方案,但一直非常强大。我没有在我的任何一个窗口框上看到IO :: Pty,因此对plink没有任何依赖。
答案 2 :(得分:0)
SFTP实际上是带有包装器的SSH来模拟类似FTP的命令,因此mdir
实际上是ssh 'ls /path/to/dir'
。
虽然可能存在避免IO::Pty
的Perl SFTP程序包,但只需将“FTP”命令转换为ssh / scp等效项并查看Net::SSH
<,就可以更快地获得解决方案/ p>
---按要求添加示例---
#!/bin/env perl
use Net::OpenSSH ();
my $connection = Net::OpenSSH->new('somehost.com', user => 'myuser', password => 'mypassword' );
my @ls = $connection->capture("ls");
printf "remote listing is %s\n", join(', ', @ls);
这应该将文件列出到您的控制台。
您提到没有IO :: Pty,因为它不适用于Windows机器。也许您应该尝试安装IO :: Pty :: Easy。请注意,Net::OpenSSH
也使用IO::Pty
,但如果您还按照此帖http://www.perlmonks.org/bare/?node_id=856863
Glib
,则可以在Windows上执行此操作
祝你好运!