我想使用 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
如果您希望无论是否成功都关闭本地系统,则可以&&
用替换;
。