有没有办法让rsync在开始传输之前执行命令

时间:2014-05-25 01:12:14

标签: bash shell

我正在编写一个脚本,用于从远程位置传输文件(使用rsync),然后对检索到的内容执行一些基本操作。

当我最初连接到远程位置(不运行rsync守护程序,我只是使用rsync来检索文件)时,我被放置在非标准shell中。为了进入bash shell,我需要输入“run util bash”。有没有办法在rsync开始传输文件之前执行“run util bash”?

如果有办法使用scp / ftp而不是rsync,我愿意接受其他建议。

2 个答案:

答案 0 :(得分:5)

一种方法是从服务器而不是从客户端执行rsync。 ssh反向隧道允许我们从远程服务器临时访问本地计算机。

  1. 假设本地计算机在端口22上有一个ssh服务器
  2. shh进入远程主机,同时指定一个reverse隧道,该隧道将远程机器中的端口(在本例中为我们使用2222)映射到本地计算机中的端口22
  3. 执行rsync命令,用反向ssh隧道地址替换对本地计算机的任何引用:my-local-user @ localhost
  4. 为rsync的ssh添加一个端口选项,让它使用2222端口。
  5. 命令:

    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