如何运行 rsync 及其命令链

如何运行 rsync 及其命令链

我对使用 rsync 运行命令感到困惑

我的情况:

abc.com xyz.com

abc.com 的根公钥被添加到 xyz.com,反之亦然。

但是,我可以使用普通用户测试执行 rsync,但我想在服务器 xyz.com 上执行命令 sudo cdsw status,并且也必须复制数据。

从 abc.com,我执行以下命令

sudo rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" /var/lib/cdsw/ xyz.com:/var/lib/cdsw/

但是我想在远程服务器 xyz.com 上 rsync 之前执行 sudo cdsw status,并在 rsync 完成复制后执行 sudo cdsw start,我该如何与上述命令链接?

我尝试了所有可能的方法但都没有奏效。

请帮忙。

答案1

这实际上不是一个rsync问题……而是一个 bash/脚本问题。
-e参数实际上仅用于在远程服务器上启动 shell。它不用于执行任意命令。我能想到的选项实际上只有 2 个:

1)多个 ssh 请求:

sudo ssh -i /root/.ssh/id_rsa.pub abc.com cdsw status
sudo rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub abc.com" /var/lib/cdsw/ xyz.com:/var/lib/cdsw/
sudo ssh -i /root/.ssh/id_rsa.pub abc.com cdsw start

2)创建在远程服务器登录时调用的自定义脚本:

/root/自定义-rsync.sh

#!/bin/bash
function cleanup {
  echo "Starting cdsw"
  cdsw start
}
trap cleanup EXIT
cdsw status
bash

进而:

sudo rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub abc.com /root/custom-rsync.sh" /var/lib/cdsw/ xyz.com:/var/lib/cdsw/

附言一下...我不太清楚为什么你的私钥以“.pub”结尾。这通常应该是你的公钥。删除 .pub 后,你无需sudo ssh abc.com指定身份文件,因为 ssh 会自动尝试使用 id_rsa 而无需询问。

相关内容