文件

52 行
1.6 KiB
Python

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
import os
import sys
import paramiko
# 连接参数从环境变量读取,避免在代码中硬编码任何真实凭据
# 可参考 .env.example 配置;生产环境建议改用 SSH 密钥认证
hostname = os.environ.get("SSH_HOST", "")
port = int(os.environ.get("SSH_PORT", "22"))
username = os.environ.get("SSH_USER", "")
password = os.environ.get("SSH_PASSWORD", "")
# SSH 连接并执行关机命令
def shutdown_server():
if not all([hostname, username, password]):
print("请先通过环境变量配置 SSH_HOST / SSH_USER / SSH_PASSWORD(可参考 .env.example)")
sys.exit(1)
try:
# 创建 SSH 客户端对象
client = paramiko.SSHClient()
# 自动添加主机密钥(如果是首次连接)
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程服务器
client.connect(hostname, port, username, password)
# 执行关机命令
# stdin, stdout, stderr = client.exec_command('sudo shutdown -h now')
stdin, stdout, stderr = client.exec_command('sudo ls /')
# 如果需要输入 sudo 密码,可以通过 stdin 传递
stdin.write('your_sudo_password\n')
stdin.flush()
# 输出命令执行结果
output = stdout.read().decode()
error = stderr.read().decode()
if output:
print("Output:", output)
if error:
print("Error:", error)
# 关闭 SSH 连接
client.close()
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
shutdown_server()