saltstack管理windows

发布于 2022-10-26  656 次阅读


saltstack管理windows

一、saltstack 安装

1.1 saltstack 安装

saltstack 具体系统的安装方法可以查看官网文档:

http://docs.saltstack.cn/topics/installation/rhel.html#zeromq-4以及https://repo.saltproject.io/#rhel

##导入 SaltStack 存储库密钥
rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/3004/SALTSTACK-GPG-KEY.pub
##添加saltstack 的官方yum源
wget https://repo.saltproject.io/py3/redhat/7/x86_64/3004.repo -O /etc/yum.repos.d/salt.repo
##安装salt-master  salt-minion
yum install salt-master  salt-minion
##启动salt-master  salt-minion,并设置开机自动
systemctl enable --now salt-master
systemctl enable --now salt-minion

2.1 windows 端 salt-minion 安装

在官网选择对应windows系统版本的salt-minion(https://repo.saltproject.io/#windows

静默安装windows 的 Salt-Minion

Salt-Minion-3004.2-1-Py3-AMD64-Setup.exe /S /master=192.168.96.11 /minion-name=win-192.168.39.132

安装完成后可以通过,任务管理→服务中 ,查看salt-minion 服务状态

master 查看minion 连接情况

[root@localhost ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
win-192.168.65.37
Rejected Keys:
salt-key -A
##接受所有id证书请求
[root@localhost ~]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
win-192.168.65.37
Key for minion win-192.168.65.37 accepted.
##再次查看可以发现,id:win-192.168.65.37加入授信
[root@localhost ~]# salt-key -L
Accepted Keys:
win-192.168.65.37
Denied Keys:
Unaccepted Keys:
Rejected Keys:

salt-minion windows 的配置文件C:\ProgramData\Salt Project\Salt\conf\minion ,可以通过修改id,来更改minion-name

二、salt 端口详情

 saltstack是基于C/S架构的服务模式,服务器端叫做Master,客户端叫作Minion。并且有消息队列中的发布与订阅(pub/sub)服务模式,minion与master之间通过ZeroMQ消息队列通信,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)

端口信息 功能
4505属于Salt Master Ret接口 port 信息认证、文件服务、结果收集等功能
4506属于Salt Master Pub接口 port 提供远程执行命令发送功能

salt-minion启动时从配置文件中获取master地址,如果为域名,则进行解析。解析完成后,会连接master的4506进行从而进行key认证。认证通过后,会连接4505端口订阅来自master pub接口的任务;

当master下发操作指令时,所有minion都能接收到,然后minion会检查本机是否匹配。如果匹配,则执行。执行完毕后,把结果发送到master的4506由master进行处理。

< font cmaster和minion命令发送通信完全是异步的,并且命令包通过maqpack进行序列化后数据会进一步压缩,所以salt的网络负载非常低。

三、salt master 管理windows 服务器

3.1 管理windows文件

替换文件内容

##查看E:\test1\buwo1.txt 文件内容
[root@localhost ~]# salt 'win-192.168.65.37' cmd.run 'powershell cat E:\test1\buwo1.txt'
win-192.168.65.37:
    haier

##将E:\test1\buwo1.txt 内容替换成haier001,-replace 操作符默认是大小写不敏感(使用-creplace会大小写敏感)
[root@localhost ~]# salt 'win-192.168.65.37' cmd.powershell '(Get-Content E:\test1\buwo1.txt) | Foreach-Object {$_ -replace ("haier","haier001")} | Set-Content E:\test1\buwo1.txt'
win-192.168.65.37:
    ----------
[root@localhost ~]# salt 'win-192.168.65.37' cmd.run 'powershell cat E:\test1\buwo1.txt'    win-192.168.65.37:
    haier001

在文件底部添加内容

将在附加之前检查编码并匹配它

##文件E:\test1\buwo1.txt 末尾添加https://stackoverflow.com
[root@localhost ~]# salt 'win-192.168.65.37' cmd.powershell '"https://stackoverflow.com" | Set-Content -Append E:\test1\buwo1.txt'
win-192.168.65.37:
    ----------
[root@localhost ~]# salt 'win-192.168.65.37' cmd.run 'powershell cat E:\test1\buwo1.txt' win-192.168.65.37:
    haier001
    https://stackoverflow.com

3.2 管理windows文件目录

##查看E:/test1/ 下的文件内容
[root@localhost salt]# salt 'win-192.168.65.37' cmd.run 'powershell ls E:/test1/'
win-192.168.65.37:

        Ŀ¼: E:\test1

    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----       2022/10/31     15:14             14 buwo.txt
    -a----        2022/11/1      9:30             76 buwo1.txt

##创建tmp.xml文件,以下方法均可
salt 'win-192.168.65.37' file.touch 'E:\test1\tmp.xml'
salt 'win-192.168.65.37' cmd.run 'type nul>E:\test1\tmp.xml'

##创建一个abc目录,以下方法均可
salt 'win-192.168.65.37' file.mkdir 'E:\test1\abc'
salt 'win-192.168.65.37' cmd.run 'md E:\test1\abc'

##删除文件 salt file.remove 可以用于删除文件以及目录
## windows rd 用于删除目录以及文件目录内文件,del用于删除指定文件
salt 'win-192.168.65.37' file.remove 'E:\test1\tmp.xml'

##将master 上的文件复制到win-192.168.65.37上
[root@localhost salt]# salt 'win-192.168.65.37' cp.get_file salt://init.sh E:/test1/init.sh
win-192.168.65.37:
    E:/test1/init.sh

3.3 查看windows磁盘

[root@localhost ~]#  /usr/bin/salt 'win-192.168.65.37' cmd.run 'powershell Get-Wmiobject -Class Win32_logicaldisk'
win-192.168.65.37:
    DeviceID     : A:
    DriveType    : 2
    ProviderName :
    FreeSpace    :
    Size         :
    VolumeName   :

    DeviceID     : C:
    DriveType    : 3
    ProviderName :
    FreeSpace    : 40301436928
    Size         : 53109321728
    VolumeName   :

    DeviceID     : D:
    DriveType    : 5
    ProviderName :
    FreeSpace    :
    Size         :
    VolumeName   :

    DeviceID     : E:
    DriveType    : 3
    ProviderName :
    FreeSpace    : 10691887104
    Size         : 10734268416
    VolumeName   : 新加卷

3.4 管理windows 防火墙

防火墙固定开启/关闭命令

##打开/关闭windows防火墙
netsh advfirewall set allprofiles  state on/off 

##打开/关闭专用网络防火墙
netsh advfirewall set privateprofile state on/off

##打开/关闭公用网络防火墙
netsh advfirewall set publicprofile state on/off

netsh advfirewall firewall 规则说明

命令 说明
add 添加新入站或出站防火墙规则
delete 删除所有匹配的防火墙规则
set 为现有规则的属性设置新值
show 显示指定的防火墙规则

add rule命令:添加防火墙规则

netsh advfirewall firewall add rule name="nginx-80" dir=in localport=80 action=allow protocol=TCP
  • name:规则名称

  • dir:方向,in为入站,out为出站

  • localport:指定端口号

  • action:操作,allow允许连接,block阻止连接

  • protocol:协议类型,tcp和udp

delete rule命令:删除防火墙规则

netsh advfirewall firewall delete rule name="nginx-80" protocol=tcp localport=80

这条命令会删除名称为“nginx-80”且协议类型为tcp,端口为80的防火墙规则

如果 名字的名字下规则,端口指定多个可以使用以下规则

netsh advfirewall firewall delete rule name="nginx-80"

set rule命令:修改防火墙规则

netsh advfirewall firewall set rule name="nginx-80" new localport=1536
##启用规则
netsh advfirewall firewall set rule name="nginx-80" new enable=yes

show rule命令:查看防火墙规则

netsh advfirewall firewall show rule name="nginx-80"

以上命令均可以用使用cmd.run 模块执行

3.5修改windows 用户密码

salt  'win-192.168.65.37'  cmd.run 'net user administrator 05Fg~4NBaQ'

3.6修改salt-minion name

findstr命令类似linux grep

查看C:\ProgramData\Salt Project\Salt\conf\minion 配置文件minion name

[root@localhost ~]# salt  'win-192.168.65.37'  cmd.run 'type  "C:\ProgramData\Salt Project\Salt\conf\minion" |findstr "id:" '                                              win-192.168.65.37:
    id: win-192.168.65.37

我们将 win-192.168.65.37 替换成win-65.37

[root@localhost ~]# salt  'win-192.168.65.37' cmd.powershell '(Get-content "C:\ProgramData\Salt Project\Salt\conf\minion") | Foreach-Object {$_ -replace"win\-192.168.65.37","win-65.37"} | Set-Content "C:\ProgramData\Salt Project\Salt\conf\minion"'
win-192.168.65.37:
    ----------
[root@localhost ~]# salt  'win-192.168.65.37'  cmd.run 'type  "C:\ProgramData\Salt Project\Salt\conf\minion" |findstr "id:" '                                              win-192.168.65.37:
    id: 192.168.65.37

重启salt-minion 服务

salt  'win-192.168.65.37'  service.restart  salt-minion

特别说明:

以及配置到windows 环境变量的服务 可以直接 net stop/start [服务名] 来启停服务net stop service && net start service来重启服务,没有添加到系统环境变量的可以通过执行.exe /.bat 文件来启动停止服务器