52 行
1.6 KiB
Python
52 行
1.6 KiB
Python
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()
|