我正在编写一个脚本,用于从远程位置传输文件(使用rsync),然后对检索到的内容执行一些基本操作。
当我最初连接到远程位置(不运行rsync守护程序,我只是使用rsync来检索文件)时,我被放置在非标准shell中。为了进入bash shell,我需要输入“run util bash”。有没有办法在rsync开始传输文件之前执行“run util bash”?
如果有办法使用scp / ftp而不是rsync,我愿意接受其他建议。
答案 0 :(得分:5)
一种方法是从服务器而不是从客户端执行rsync。 ssh反向隧道允许我们从远程服务器临时访问本地计算机。
命令:
ssh -R 2222:localhost:22 remoteuser@remotemachine << EOF
# we are on the remote server.
# we can ssh back into the box running the ssh client via ${REMOTE_PORT}
run utils bash
rsync -e "ssh -p 2222" --args /path/to/remote/source remoteuser@localhost:/path/to/local/machine/dest
EOF
将复杂命令传递给ssh的参考: What is the cleanest way to ssh and run multiple commands in Bash?
答案 1 :(得分:0)
您也可以使用--rsync-path
来实现。例如rsync --rsync-path="run util bash && rsync" -e "ssh -T -c aes128-ctr -o Compression=no -x" ./tmp root@example.com:~
--rsync-path
通常用于指定要在远程计算机上运行什么程序来启动rsync。通常在rsync不在默认远程Shell路径(例如–rsync-path = / usr / local / bin / rsync)中时使用。请注意,PROGRAM是在Shell的帮助下运行的,因此它可以是您要运行的任何程序,脚本或命令序列,只要它不会破坏rsync使用的标准输入和标准输出即可。进行交流。
有关更多详细信息,refer