Net::SFTP::Foreign 把代理选项传给 OpenSSH
通过 Net::SFTP::Foreign 的公开 more 参数,把一个 ProxyCommand 作为一个 SSH 选项参数传入。
使用 Net::SFTP::Foreign 的 OpenSSH 后端时,代理路由可以写成一个 SSH 选项。该模块文档中记录的 more 参数接受一个命令参数数组:
use Net::SFTP::Foreign;
my $sftp = Net::SFTP::Foreign->new(
'files.example.net',
user => 'operator',
more => [
'-o',
'ProxyCommand=nc -X 5 -x proxy.example.net:1080 %h %p',
],
);
die $sftp->error if $sftp->error;这假定已经有一个兼容 OpenBSD 的 nc 辅助程序。OpenSSH 会在本地运行它,以建立到 SFTP 目标的 SOCKS5 连接。占位符提供 SSH 选定的主机和端口。要经过允许的公共中转访问公共 SFTP 服务器,请为这个辅助程序从SOCKS5 代理列表中选一个无需账号的端点;它必须放行该 SSH 目标和端口。
参数的边界很关键:-o 是一个参数,整个 ProxyCommand 赋值是下一个参数。Net::SFTP::Foreign 的 more 参数不会自动把包含多个 SSH 参数的任意字符串当作数组。
应用也可以把 ProxyCommand 留在常规的 SSH Host 配置里,再把该主机别名交给 Net::SFTP::Foreign。两种形式都可以使用 OpenSSH 后端的配置;Plink 等不同后端有自己的选项语法。