Files
devops/tools/auto_init.py
2025-03-17 11:53:43 +08:00

60 lines
2.0 KiB
Python

import paramiko
# 服务器列表,包含主机名、端口、用户名和密码
servers = [
{
"hostname": "your_host1",
"port": 22,
"username": "your_username1",
"password": "your_password1"
}
]
# Git 仓库信息
git_username = "your_git_username"
git_password = "your_git_password"
git_repo_url = "https://github.com/your-repo/your-project.git"
# 嵌入凭证的 Git URL
git_url_with_credentials = f"https://{git_username}:{git_password}@github.com/your-repo/your-project.git"
# 要执行的命令列表
commands = [
"sudo apt update",
"sudo apt install -y python3 python3-pip git",
"pip3 install requests numpy",
"mkdir -p /path/to/your/project",
f"git clone {git_url_with_credentials} /path/to/your/project",
"cd /path/to/your/project && python3 init_script.py",
"cd /path/to/your/project && python3 main.py"
]
def execute_commands_on_server(server):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=server["hostname"], port=server["port"],
username=server["username"], password=server["password"])
for command in commands:
print(f"{server['hostname']} 上执行命令: {command}")
stdin, stdout, stderr = ssh.exec_command(command)
result = stdout.read().decode()
error = stderr.read().decode()
if result:
print(f"命令输出:\n{result}")
if error:
print(f"命令错误信息:\n{error}")
ssh.close()
except paramiko.AuthenticationException:
print(f"连接 {server['hostname']} 时认证失败,请检查用户名和密码。")
except paramiko.SSHException as ssh_ex:
print(f"连接 {server['hostname']} 时发生 SSH 异常: {ssh_ex}")
except Exception as ex:
print(f"连接 {server['hostname']} 时发生未知异常: {ex}")
for server in servers:
execute_commands_on_server(server)