在服務器開啟了IP白名單等情況下,我們有時需要通過代理來連接服務器,而rsync自然也會遇到這個問題。某篇博客中提到使用環境變量RSYNC_PROXY來指定socks5代理,這其實是錯誤的,RSYNC_PROXY指定的是http代理。
然而,RSYNC_PROXY只支持rsync服務模式,而很多時候我們用rsync時都是用SSH這樣的遠程Shell程序來進行同步(如果服務器上沒有運行rsync的后台服務,基本就是使用SSH同步方式,詳細可參見這篇文章),這種情況下該如何使用代理呢?
當然是有方法的:
rsync -avuz -e 'ssh -p 22 -o "ProxyCommand=nc -x 127.0.0.1:1080 %h %p"' root@hostname:/remote_dir /local_dir
其中127.0.0.1:1080就是socks5代理地址。如果報了nc不支持-x參數的問題,說明你的netcat版本不對,需要安裝netcat-openbsd