我是user1@host1
,想通过 传输数据rsync
。user3@host3
但是,我只能host3
通过访问user3@host2
。问题是,我只能通过user3
或成为,但必须连接到。host2
su
sudo
host2
user2
因此,为了登录到host3
shell,我执行:
user1@host1 $ ssh user2@host2
user2@host2 $ su user3
user3@host2 $ ssh host3
user3@host3 $ # done!
我尝试将所有这些内容封装在一个(单个)调用中,结果rsync
如下:
rsync -a -e "ssh -A user2@host2 'sudo -u user3 ssh'" host3:/... /...
不幸的是,requiretty
设置/etc/sudoers
在host2
,因此导致出现以下消息:sudo: sorry, you must have a tty to run sudo
。
我可以添加-tt
到 ssh 调用:
rsync -a -e "ssh -tt -A user2@host2 'sudo -u user3 ssh'" host3:/... /...
在这种情况下,我得到:protocol version mismatch -- is your shell clean?
。显然,的 TTY 上的某些输出host2
导致 rsync 失败。我无法控制该输出或/etc/sudoers
。
有什么方法可以做到这一点吗,也许使用ProxyCommand
SSH 隧道?
使用这个simplescript.sh
它的工作原理:
#!/bin/sh
ssh user2@host2 "su user3 -p -c 'ssh $@'"
然后rsync
:
rsync -av -e './simplescript.sh' pmtlnx009.wob.vw.vwg:/tmp/t19 /tmp/t19
我想那很好;不过,将脚本集成到 CLI 调用中会更好。