Python批量远程执行自动关机
背景需求:
最近项目上有个需求,机房市电切断后,通过ups给设备供电时,当ups容量低于20%时,服务器进行自动关机操作,防止意外断电造成数据丢失风险,通过python代码实现当ups容量低于阈值时,执行Python程序,进行自动批量远程ssh登录服务器系统(程序支持Windows、Linux系统),再执行关机指令即可
1、Python代码,需提前安装paramiko库
""" 远程自动关机程序by江西 """ import paramiko # 创建 SSH 客户端 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) with open('config.ini','r') as file: text = file.read() lines = text.split('\n') for info in lines: server_info = info.split(',')[0] username = info.split(',')[1] password = info.split(',')[2] try: ssh.connect(server_info, username=username, password=password, timeout=30) #liunx关闭计算机命令 ssh.exec_command('sudo shutdown -h 1') # ssh.exec_command('sudo reboot') # windowns关闭计算机命令 ssh.exec_command('shutdown -f -s -t 60') # Windows重启命令 #ssh.exec_command('shutdown -r') ssh.close() print("%s 服务器远程关机成功,系统将在 1 分钟后关闭!!!"%server_info) except Exception as e: print(e)
食用方法:需和程序在同一目录下创建 config.ini 文件,Python代码读取 config.ini 文件中的字段,各字段信息如下
192.168.19.131,admin,Aa13579 #192.168.19.131为服务器ip、admin为登录账号,Aa13579为登录密码 192.168.19.128,zhangka,a123456 #192.168.19.128为服务器ip、zhangka为登录账号,a123456为登录密码
2、因Windows端没有安装ssh服务(Linux原生支持),所以需要在Windows上安装ssh服务,以下两个包随便一个(一个是安装包,一个是需要手动配置软件path)
因Linux执行shutdown关机命令需要sudo权限,请看这篇文章设置免密执行shutdown命令(https://www.cnblogs.com/xiykj/p/18872324)
Windows端下载链接:https://github.com/PowerShell/Win32-OpenSSH/releases
3、将软件解压出来,放到 C:\Program Files 文件夹下
4、把软件路径加到系统环境变量里,右键计算机----->属性----->高级系统设置----->高级------>环境变量----->系统变量----->Path(双击)----->新建,再把刚下载的ssh路径粘贴进来,如:C:\Program Files\OpenSSH-Win64\
5、检查安装结果
cmd命令提示符中输入ssh、scp命令,查看输出如下结果及表示配置成功,这里只是让ssh客户端可以使用,想要让本机成为ssh服务端被远程访问控制,还需做后续配置
6、开启ssh服务,以管理员身份打开cmd命令提示符,执行以下命令
cd C:\Program Files\OpenSSH-Win64 #进入到下载的ssh目录
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 #安装ssh服务端
7、将22号端口防火墙放行
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
8、将ssh服务开机自启动
sc config sshd start= auto
9、开启sshd服务
net start sshd
10、检查ssh服务是否监听在22端口上
netstat -ano | findstr 22
11、局域网中使用其它电脑ssh端口连接测试一下,看22号端口通不通
ssh -v -p 22 admin@192.168.1.80 #测试端口连通性
12、远程关机测试,Windows和Linux都测试执行成功,如下图
执行Python程序
# Windows Server 2019
# Windows 10
# Windows 7
# Ubuntu 20.04系统