【问题标题】:Perl Net SFTP Foreign ProxyPerl 网络 SFTP 外部代理
【发布时间】:2014-06-11 22:41:27
【问题描述】:

我正在尝试通过 sftp 连接到客户端计算机并通过 Perl Net::SFTP::Foreign 将文件放在那里。我看过很多关于如何做到这一点的示例,但没有一个涉及使用 socks 代理

背景: 对于标准的Net::FTP,我可以使用IO Socket Wrapper,一切都会被代理:

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 的 url 解释这一点:http://www.perlmonks.org/?node_id=938019

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

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

【问题讨论】:

  • > 对于标准 Net::FTP,我可以使用 IO Socket Wrapper,并且一切都被代理:当代理还需要一些基本身份验证时,我如何使用 Net::FTPIO Socket Wrapper?跨度>

标签: perl proxy sftp


【解决方案1】:

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

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

 socat stdio SOCKS4:proxy_server:sftp_server:22

其中proxy_serversftp_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']);

【讨论】:

  • ftp 服务器是 ProxyCommand 的一部分,还是应该是代理服务器?
  • 另外,我在哪里可以买到 socat?是进行构建的唯一选择吗?
  • socat 可作为大多数(所有?)Linux 发行版的软件包使用。一些netcat 实现还支持通过 SOCKS 代理。
  • socat 需要传递代理的名称和远程服务器的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多