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

lac*_*991 4 bash shell

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

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

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

eal*_*nso 5

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

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

命令:

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
Run Code Online (Sandbox Code Playgroud)

将复杂命令传递给ssh的参考: 在bash中最简单的ssh和运行多个命令的方法是什么?