salt stack 远程命令
salt stack 远程命令#
salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理、远程命令执行等操作。
salt stack分为两个部分
1 2 | salt-master,部署在控制服务器上,用于发出运维指令; salt-minion,部署在所有需要批量运维的线上服务器上; |
salt安装#
1 2 | 服务端:yum install salt-master -y 客户端:yum install salt-minion -y |
配置文件#
服务端:/etc/salt/master
服务端配置:
interface: 192.168.1.229 auto_accept: True
其中,interface 用于设置master监听的IP地址;
auto_accept设置是否自动接收minion的KEY。
master启动后默认监听4505和4506两个端口:4505(publish_port)为salt的消息发布系统;4506(ret_port)为salt客户端与服务端通信的端口。
客户端:/etc/salt/minion
客户端配置:
master: 192.168.1.229 id :34
其中,master设置服务端地址;
id用于设置minion自身的ID,master根据这个ID识别minion;
启动服务#
1 2 | 服务端启动方式:service salt-master start 客户端启动方式:service salt-minion start |
程序日志:(有问题可查日志获取出错信息)#
1 2 | 服务端:/var/log/salt/master 客户端:/var/log/salt/minion |
key管理#
1、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master;
2、master 在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。
Salt在master和minion数据交换过程中使用AES加密, 为了保证发送给minion的指令不会被篡改,在发送命令到minion之前,minion的key需要先被master所接受(accepted),运行salt-key可以列出当前key的状态:
1 2 3 4 5 6 7 8 9 10 | [root@localhost src]# salt-key -L Accepted Keys: 34 35 37 39 56 57 Unaccepted Keys: Rejected Keys: |
salt-key命令可以接受特定的单个key或批量接受key,使用-A选项接受当前所有的key,接受单个key可以使用-a keyname。
认证命令为salt-key,常用的有如下命令
1 2 3 4 5 6 | -a ACCEPT, --accept=ACCEPTAccept the following key -A, --accept-all Accept all pending keys -r REJECT, --reject=REJECTReject the specified public key -R, --reject-all Reject all pending keys -d DELETE, --delete=DELETEDelete the named key -D, --delete-all Delete all keys |
当然salt也是可以自动认证的,把下面的False改成True就OK了:
grep -n "auto_accept:" /etc/salt/master
执行命令#
salt 命令的格式
1 | salt < target > < function > < args > |
这里target是指minion的id,function是要执行的功能函数,args是函数参数。例如:
1 2 3 | salt '*' cmd.run 'ls /home/' salt '*' cmd.exec_code bash 'for i in {1,2};do echo $i;done' salt '*' service.restart salt-minion |
对所有的minion执行命令:
salt '*' cmd.run 'uptime'
输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 | 34: 18:13:18 up 268 days, 6:04, 3 users, load average: 0.73, 0.87, 0.88 37: 18:13:18 up 142 days, 16:51, 1 user, load average: 0.47, 0.50, 0.46 39: 18:13:17 up 142 days, 16:49, 3 users, load average: 0.60, 0.59, 0.51 35: 18:13:17 up 268 days, 6:03, 1 user, load average: 1.11, 0.97, 0.87 57: 18:13:18 up 149 days, 2:30, 1 user, load average: 1.54, 1.62, 1.55 56: 18:13:17 up 149 days, 2:31, 0 users, load average: 1.50, 1.59, 1.51 |
-L选项指定minion列表:
salt -L '35,56' cmd.run 'uptime'
-E选项使用正则匹配指定minion列表:
salt -E '^3' cmd.run 'uptime'
-N选项指定一个分组:
salt -N group2 test.ping
这里的test.ping命令和ICMP的ping没有关系。
注意:服务器分组需要事先在配置文件(/etc/salt/master)添加。
这里可以查看到salt支持的所有模块提供的功能列表:
salt '*' -d cmd
比如:
1、disk模块,查看磁盘使用率
salt '*' disk.usage salt '*' disk.percent /var salt '*' disk.inodeusage
2、dig模块
salt ns1 dig.A www.google.com salt ns1 dig.AAAA www.google.com salt ns1 dig.MX google.com salt ns1 dig.NS google.com salt ns1 dig.SPF google.com salt ns1 dig.check_ip 127.0.0.1
3、pkg模块,用于批量安装minion服务器
salt '*' pkg.install <package name> salt '*' pkg.upgrade
注意:不同的linux发行版本,采用的包管理方式不一样,例如Ubuntu使用apt,CentOS使用yum等,因此该模块有不同的实现;
4、cron模块,管理集群的crontab
salt '*' cron.ls root salt '*' cron.raw_cron root salt '*' cron.rm_job root /usr/local/weekly salt '*' cron.rm_env root MAILTO salt '*' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly salt '*' cron.write_cron_file root /tmp/new_cron
5、at模块,一次性任务
salt '*' at.at 12:05am '/sbin/reboot' tag=reboot salt '*' at.at '3:05am +3 days' 'bin/myscript' tag=nightly runas=jim salt '*' at.atq salt '*' at.atrm all
1 2 3 4 5 6 7 | salt '*' service.available sshd salt '*' service.get_all salt '*' service.reload < service name> salt '*' service.restart < service name> salt '*' service.start < service name> salt '*' service.stop < service name> salt '*' service.status < service name> [service signature] |
7、cmd模块
salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'" salt '*' cmd.exec_code python2 'print("hello world")' salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'
cmd模块可以执行一段代码、也可以执行一个指定脚本;
8、nginx模块,批量操作nginx服务器
salt '*' nginx.configtest salt '*' nginx.signal reload salt '*' nginx.status salt '*' nginx.version
类似的,salt还支持对
等模块的支持。
参考文档:
http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架