我正在寻找一种方法,将配置从一台中央机器推送到几台远程机器,而无需在远程机器上安装任何东西。
目的是cfengine
在一组未设置代理的机器上执行类似使用 之类的工具所发现的操作。这实际上可能是cfagent
在一组现有远程机器上进行设置的一种好方法。
答案1
您可以传递一个脚本,并通过管道传入并执行 shell 来让它暂时执行。
例如
echo "ls -l; echo 'Hello World'" | ssh me@myserver /bin/bash
当然,该"ls -l; echo 'Hello World'"
部分可以用存储在本地机器上的文件中的 bash 脚本来替换。
例如
cat script.sh | ssh me@myserver /bin/bash
干杯!
答案2
有几种方法可以做到这一点。
1:
ssh user@remote_server 'bash -s' < localfile
2:
cat localfile | ssh user@remote_server
3:
ssh user@remote_server "$(< localfile)"
第三个是我喜欢的方式,它允许交互命令,例如sudo -S service nginx restart
(当您使用时,#1 和 #2 将会使用脚本的其余部分作为密码问题的输入sudo -S
。)
答案3
为此,我推荐使用 Python 的 Fabric:
#!/usr/bin/python
# ~/fabfile.py
from fabric_api import *
env.hosts = ['host1', 'host2']
def deploy_script():
put('your_script.sh', 'your_script.sh', mode=0755)
sudo('./your_script.sh')
# from shell
$ fab deploy_script
您应该能够使用上述内容开始使用。请参阅 Fabric 的优秀文档完成剩下的工作。补充一点,完全可以在 Fabric 中编写脚本 - 无需复制,但需要注意的是,要更改所有机器上的脚本,只需编辑本地副本并重新部署即可。此外,除了 API 的基本使用之外,您还可以根据脚本当前在哪个主机上运行和/或其他变量来修改脚本。这是一种 Python 式的 Expect。