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系统

 

posted @ 2025-05-16 14:42  凡是過往;皆為序章  阅读(122)  评论(0)    收藏  举报