对 rsync 的 SSH 传输来说,应把正向代理连接挂在 SSH 主机别名上。使用 OpenBSD 版 nc 时,可在 ~/.ssh/config 中选用无需认证的 HTTP 代理:

Host sync-target
    HostName files.example.net
    User syncuser
    Port 22
    ProxyCommand nc -X connect -x proxy.example.net:8080 %h %p

该代理必须允许 CONNECT 到 files.example.net:22。若目标 SSH 主机允许使用公共中转,HTTP 代理列表提供了无需账号的代理主机与端口候选;但需确认实际 SSH 目标与端口被许可。nc 的 -x 地址指定中转;%h 与 %p 会展开为 SSH 目的地与端口。另有同名 nc 程序可能不支持这些开关。

在 rsync 中把该别名当作远端主机:

rsync -av -e ssh sync-target:/srv/export/ ./export/

单冒号路径选用远程 shell 形式。SSH 使用其常规的目标账号与主机密钥配置,而辅助程序负责把字节流经 HTTP 代理送出。目标端还需安装 rsync 以执行远端命令。

RSYNC_PROXY 配置的是 rsync 直连守护进程的方式,并不作用于这次 SSH 调用。同理,把 SSH 的 Port 改成 8080 只会选中目的服务的另一个端口,而不是指定代理监听端。

如需代理认证,应使用所选辅助程序支持的接口;SSH 用户名并不等于代理用户名。

相关文章