Perl Net SFTP外部代理



我试图通过sftp连接到客户端机器,并通过Perl Net::SFTP::Foreign放置文件。我看过很多关于如何做到这一点的例子,但是没有一个涉及到使用socks代理

背景:

对于标准的Net::FTP,我可以使用IO套接字包装器,并且所有内容都被代理:

use IO::Socket::Socks::Wrapper({
    ProxyAddr  => 'my.proxy.address',
    ProxyPort  => 1080,
    SocksDebug => 1 #enable for debugging
});

但是,这不适用于Net::SFTP::Foreign。所以,我正试图想出一个解决办法。

if ($sftp = Net::SFTP::Foreign->new("ftp.myserver.com",
   user      => "ftpusername",
   password  => "ftpuserpwd",
   more      => [-o => 'ProxyCommand=ssh -D 1080 my.proxy.address'],
))
{
     some code that runs when successful auth...
}

…我在Perl Monks上找到了上述内容,但似乎没有帮助。下面是Perl Monks的网址:http://www.perlmonks.org/?node_id=938019

我认为关键是要使用正确的ProxyCommand,但我不确定这是正确的。

有人知道我如何通过sftp和代理发送文件吗?

您需要一个知道如何与SOCKS代理通信的实用程序。例如socat

您需要做的第一件事是找出如何调用该实用程序,以便通过代理建立到SFTP服务器的连接。应该是这样的:

 socat stdio SOCKS4:proxy_server:sftp_server:22

其中proxy_server为代理服务器名,sftp_server为SFTP服务器名。

你知道什么时候你做对了因为你从SSH服务器得到版本字符串,类似于SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2

然后,您只需要将命令传递给Net::SFTP::Foreign构造函数,如下所示:

$sftp=Net::SFTP::Foreign->new("ftp.myserver.com",
                              user     => "ftpusername",
                              password => "ftpuserpwd",
                              more     =>
                                  [-o=>'ProxyCommand=socat stdio SOCKS4:$proxy_server:ftp.myserver.com:22']);

最新更新