让 rsync 通过 HTTP 代理复用 SSH 主机别名
把 HTTP CONNECT 辅助程序接到 rsync 远程 shell 传输所用的 SSH 配置上。
对 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 用户名并不等于代理用户名。