如何远程复制文件到远程Linux机器并随后重新启动服务?

如何远程复制文件到远程Linux机器并随后重新启动服务?

我想使用 SCP 将文件复制到远程 Linux 计算机。

我会定期更新hosts和dnsmasq.conf并使用SCP将它们复制到远程机器: /etc/hosts /etc/dnsmasq.conf

之后我需要运行:“sudo systemctl restart dnsmasq”

除了我上面提到的以外,我不希望远程用户在远程计算机上执行任何操作。

谢谢!

答案1

如果您想在文件修改时(无论由谁修改)重新启动服务,您可以考虑使用incron在远程机器上。

只需安装软件包并设置正确的incrontab条目:

/etc/dnsmasq.conf IN_MODIFY systemctl restart dnsmasq

createrepo例如,当我将 rpm 包上传到本地存储库时,我使用它来触发命令,并且它似乎工作顺利。

答案2

根据@Fiximan 的建议,您可以使用以下命令来完成您需要的操作。

ssh -o "PermitLocalCommand yes" -o "LocalCommand sleep 10 && sudo systemctl restart dnsmasq" user2@host2 "scp user1@host1:/path/to/source /path/to/target"

这将运行scp以将本地文件复制到远程系统;同时,它会等待10秒,然后关闭本地系统。不幸的是,无论是否成功,都会在 10 秒后关闭scp

如果您的系统足够新,它可能支持使用感叹号在本地运行命令(前提是启用了 PermitLocalCommand)。在这种情况下,-o "LocalCommand sleep 10 && sudo systemctl restart dnsmasq"您可以运行而不是使用

ssh -o "PermitLocalCommand yes" user2@host2 "scp user1@host1:/path/to/source /path/to/target && !sudo systemctl restart dnsmasq"

感叹号发送要在本地系统上执行的命令。在这种情况下,仅当成功时才会关闭本地系统scp,并且系统将询问丢失的任何密码。

scp如果您希望无论是否成功都关闭本地系统,则可以&&用替换;

相关内容