我对使用 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 而无需询问。