Windows执行脚本远程关闭Linux服务器
需求:
目前项目上有一个需求:当市电断电后,使用ups供电时,ups会实时的通过RS232串口将自身电量数据信息发送给电脑(Windows端),当电量低于所设定的阈值时,通知电脑进行关机,防止意外断电造成的数据丢失,系统损坏硬件故障,给企业造成巨大损失。可是目前程序只支持Windows端,不支持Linux,所有想用Windows通过ssh远程连接到Linux服务器上,执行shutdown关机指令
解决方案:
1、Windows上需先安装python以及paramiko库
2、将以下代码保存为shutdown.py文件,然后在cmd命令行中执行即可(可能有些没有root权限的账户,需要配置sudo免密执行,请看这篇文章 https://www.cnblogs.com/xiykj/p/18872324)
import paramiko
class SshClass:
"""
ssh连接对象
本对象提供了密钥连接、密码连接、命令执行、关闭连接
"""
ip = ''
port = 22
username = ''
timeout = 0
ssh = None
def __init__(self, ip, username, port=22, timeout=30):
"""
初始化ssh对象
:param ip: str 主机IP
:param username: str 登录用户名
:param port: int ssh端口
:param timeout: int 连接超时
"""
self.ip = ip
self.username = username
self.port = port
self.timeout = timeout
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh = ssh
def conn_by_key(self, key):
"""
密钥连接
:param key: str rsa密钥路径
:return: ssh连接对象
"""
rsa_key = paramiko.RSAKey.from_private_key_file(key)
self.ssh.connect(hostname=self.ip, port=self.port, username=self.username, pkey=rsa_key, timeout=self.timeout)
if self.ssh:
print("密钥连接成功.")
else:
self.close()
raise Exception("密钥连接失败.")
def conn_by_pwd(self, pwd):
"""
密码连接
:param pwd: str 登录密码
:return: ssh连接对象
"""
self.ssh.connect(hostname=self.ip, port=self.port, username=self.username, password=pwd)
if self.ssh:
print("密码连接成功.")
else:
self.close()
raise Exception("密码连接失败.")
def exec_command(self, command):
"""
命令控制
:param command: str 命令
:return: dict 命令执行的返回结果
"""
if command:
stdin, stdout, stderr = self.ssh.exec_command(command)
return {
"stdin": command,
"stdout": stdout.read(),
"stderr": stderr.read()
}
else:
self.close()
raise Exception("命令不能为空字符串.")
def close(self):
"""
关闭当前连接
:return:
"""
if self.ssh:
self.ssh.close()
else:
raise Exception("ssh关闭失败,当前对象并没有ssh连接.")
if __name__ == '__main__':
SSH = SshClass("192.168.19.128", "root", port=22) #192.168.19.128为Linux服务器ip,root为账户名,port=22为ssh端口号
SSH.conn_by_pwd("123456") #123456为登录Linux服务器密码
print(SSH.exec_command("sudo shutdown -h now")) #sudo shutdown -h now为要执行的指令
3、将如下代码保存为shutdown.bat文件,最后双击执行该文件即可关闭Linux服务器
@echo off
echo.&echo Linux关机脚本程序
title Linux关机脚本程序
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
start D:\shutdown.py #这里的路径请配置第二步保存的shutdown.py脚本文件路径
echo.&pause