この質問は基本的に、scp の場合はこちら、rsync の場合はこちらなど、他の場所で回答されています。後者には私の回答が含まれていますが、回答が受け入れられなかったので、ここで繰り返します。
ご指摘のとおり、 rsync
を使用できます の -e | --rsh
オプションですが、もう少し複雑になります:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
または、バージョンが ssh
の場合 十分に新しい (OpenSSH>=v7.3) ため、-J
を使用できます (ProxyJump
) オプション
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
-A
を使用していることに注意してください (エージェント転送) ただし、キーを使用しない場合はパスワード認証でも動作するはずです。もちろん、 proxy
を置き換えることができます B
で と dest
C
で あなたの例では。
たまたま十分な新しい ssh
がない場合 バージョン (>=5.3、IIRC)、netcat
を使用できます -W
の代わりに ssh
へのオプション :
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
最後に、すでにコメントに記載されているように、 ProxyCommand
を配置できます あなたの $HOME/.ssh/config
に このような複雑なコマンド ラインを使用する必要はありません。具体的には、次のようなものを追加してください:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
または、 ProxyJump
を使用して OpenSSH>=v 7.3 の場合:
Host C
ProxyJump PROXYHOST
その後、次のことができるはずです:
rsync -azv foo/ C:./foo/