tre*_*qui 52 scripting ssh configuration bash
我正在寻找一种方法将配置从一台中央机器推送到几台远程机器,而无需在远程机器上安装任何东西。
目的是cfengine在一组没有设置代理的机器上做一些像你会发现的工具,比如。这实际上可能是cfagent在一组现有远程机器上进行设置的好方法。
tre*_*qui 58
您可以传递一个脚本并通过管道将其导入并执行 shell 使其短暂执行。
例如
echo "ls -l; echo 'Hello World'" | ssh me@myserver /bin/bash
Run Code Online (Sandbox Code Playgroud)
当然,该"ls -l; echo 'Hello World'"部分可以用存储在本地机器上的文件中的 bash 脚本替换。
例如
cat script.sh | ssh me@myserver /bin/bash
Run Code Online (Sandbox Code Playgroud)
干杯!
小智 21
有几种方法可以做到。
ssh user@remote_server 'bash -s' < localfile
Run Code Online (Sandbox Code Playgroud)
cat localfile | ssh user@remote_server
Run Code Online (Sandbox Code Playgroud)
ssh user@remote_server "$(< localfile)"
Run Code Online (Sandbox Code Playgroud)
数字 3 是我的首选方式,它允许交互式命令,例如 sudo -S service nginx restart
(#1 和 #2 将使用脚本的其余部分作为密码问题的输入sudo -S。)
Sam*_*cke 13
为此,我会推荐 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
Run Code Online (Sandbox Code Playgroud)
您应该能够使用上述内容开始。其余的请参阅Fabric 的优秀文档。作为补充,完全可以在 Fabric 中编写脚本——不需要复制,但是应该注意的是,要在所有机器上更改脚本,您只需要编辑本地副本并重新部署。此外,通过 API 的基本用法,您可以根据当前运行的主机和/或其他变量来修改脚本。这是一种pythonic Expect。
这正是 Ansible 的用途。没有代理,您只需要创建一个名为的文本文件:
/etc/ansible/hosts
Run Code Online (Sandbox Code Playgroud)
内容类似于:
[webhosts]
web[1-8]
Run Code Online (Sandbox Code Playgroud)
这将指定机器“web1、web2...web8”在“webhosts”组中。然后你可以做这样的事情:
ansible webhosts -m service -a "name=apache2 state=restarted" --sudo
Run Code Online (Sandbox Code Playgroud)
使用 sudo 重新启动所有机器上的 apache2 服务。
您可以即时执行以下命令:
ansible webhosts -m shell -a "df -h"
Run Code Online (Sandbox Code Playgroud)
或者您可以在远程机器上运行本地脚本:
ansible webhosts -m script -a "./script.sh"
Run Code Online (Sandbox Code Playgroud)
或者您可以使用您希望服务器符合的完整配置创建一个剧本(查看文档以获取详细信息)并使用以下方法进行部署:
ansible-playbook webplaybook.yml
Run Code Online (Sandbox Code Playgroud)
基本上,您可以开始将它用作在多台服务器上运行命令的命令行工具,并根据需要将其用途扩展为完整的配置工具。