From 27b77c8d7fd2de214d64a54828d4ef49ece4f049 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 13 Jul 2026 18:16:31 +0800 Subject: [PATCH] fix: correct PEM key format for SSH --- scripts/downgrade_v026.py | 80 +++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/scripts/downgrade_v026.py b/scripts/downgrade_v026.py index 7a9e95d76..49e0476d2 100755 --- a/scripts/downgrade_v026.py +++ b/scripts/downgrade_v026.py @@ -1,47 +1,58 @@ #!/usr/bin/env python3 """将新服务器Runner全部降级为v0.2.6 host模式""" -import base64 import subprocess import sys +import os NEW_SERVER = "172.30.18.199" -KEY_B64 = "b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUxOQAAACD6GquAk5vBEfbtaJCTSfnQEhjzC8e5GF60hSbPP0BJbAAAAJiQxGNokMRjaAAAAAtzc2gtZWQyNTUxOQAAACD6GquAk5vBEfbtaJCTSfnQEhjzC8e5GF60hSbPP0BJbAAAAED2muzuU4BAiCqbg0ayGxgiDvfS/xI1SFvb32oLzTnn8/oaq4CTm8ER9u1okJNJ+dASGPMLx7kYXrSFJs8/QElsAAAAFHJ1bm5lci1hZG1pbkB4aWFveGlhAQ==" REG_TOKEN = "ZMFH02WcdElay5ATmhhQYe1WNTESO9XMXcF0H9Tj" GITEA_URL = "https://git.xiaoxiajianji.com" LABELS = "saas,runtime-builder,host,ubuntu-latest,ubuntu-22.04" -# 写入密钥 +# 完整PEM格式密钥 +KEY_CONTENT = """-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACD6GquAk5vBEfbtaJCTSfnQEhjzC8e5GF60hSbPP0BJbAAAAJiQxGNokMRj +aAAAAAtzc2gtZWQyNTUxOQAAACD6GquAk5vBEfbtaJCTSfnQEhjzC8e5GF60hSbPP0BJbA +AAAED2muzuU4BAiCqbg0ayGxgiDvfS/xI1SFvb32oLzTnn8/oaq4CTm8ER9u1okJNJ+dAS +GPMLx7kYXrSFJs8/QElsAAAAFHJ1bm5lci1hZG1pbkB4aWFveGlhAQ== +-----END OPENSSH PRIVATE KEY----- +""" + key_path = "/tmp/new_server_ed25519" -with open(key_path, "wb") as f: - f.write(base64.b64decode(KEY_B64)) -import os +with open(key_path, "w") as f: + f.write(KEY_CONTENT) os.chmod(key_path, 0o600) +# 验证密钥 +r = subprocess.run(f"ssh-keygen -y -f {key_path} 2>&1", shell=True, capture_output=True, text=True) +print("密钥验证:", r.stdout.strip() or r.stderr.strip()) + def ssh(cmd): - """执行SSH命令,返回输出""" full_cmd = f'ssh -i {key_path} -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@{NEW_SERVER} "{cmd}"' - print(f"\n$ {cmd[:80]}...") + print(f"\n$ {cmd[:100]}") result = subprocess.run(full_cmd, shell=True, capture_output=True, text=True) if result.stdout: - print(result.stdout.strip()) + print(result.stdout.strip()[:500]) if result.stderr: - print("STDERR:", result.stderr.strip()[:200]) + err = result.stderr.strip()[:300] + if "Connection reset" not in err and "Warning" not in err: + print("ERR:", err) if result.returncode != 0: print(f" [RC={result.returncode}]") return result def ssh_check(cmd): - """执行SSH命令,失败则退出""" r = ssh(cmd) if r.returncode != 0: - print(f"命令失败,退出") + print("命令失败,退出") sys.exit(1) return r print("=" * 60) print("步骤1: 停止所有现有Runner服务和进程") print("=" * 60) -ssh("systemctl stop gitea-runner-1.service gitea-runner-2.service gitea-runner-3.service gitea-runner-4.service gitea-runner-5.service gitea-runner-6.service 2>/dev/null; systemctl disable gitea-runner-1.service gitea-runner-2.service gitea-runner-3.service gitea-runner-4.service gitea-runner-5.service gitea-runner-6.service 2>/dev/null; pkill -f act_runner 2>/dev/null; sleep 1; echo 'done'") +ssh("systemctl stop gitea-runner-1.service gitea-runner-2.service gitea-runner-3.service 2>/dev/null; systemctl stop gitea-runner-4.service gitea-runner-5.service gitea-runner-6.service 2>/dev/null; systemctl disable gitea-runner-*.service 2>/dev/null; pkill -f act_runner 2>/dev/null; sleep 1; echo stopped") print("\n" + "=" * 60) print("步骤2: 备份现有配置") @@ -56,27 +67,21 @@ ssh_check("cd /opt/act-runner && curl -sL -o act_runner_v0.2.6 https://gitea.com print("\n" + "=" * 60) print("步骤4: 注册6个仓库级Runner (host模式)") print("=" * 60) +import base64 for i in range(1, 7): print(f"\n--- 注册 Runner {i} ---") - cmd = f""" - mkdir -p /opt/act-runner/runner-{i} - cd /opt/act-runner/runner-{i} - rm -f .runner config.yaml 2>/dev/null - /opt/act-runner/act_runner_v0.2.6 register \ - --instance {GITEA_URL} \ - --token {REG_TOKEN} \ - --name xiaoxia-ci-runner-new-{i} \ - --labels {LABELS} \ - --no-interactive 2>&1 - echo '---注册完成---' - """ - ssh(cmd.strip()) + reg_script = f"""cd /opt/act-runner/runner-{i} +rm -f .runner 2>/dev/null +/opt/act-runner/act_runner_v0.2.6 register --instance {GITEA_URL} --token {REG_TOKEN} --name xiaoxia-ci-runner-new-{i} --labels {LABELS} --no-interactive 2>&1 +echo DONE_REG_{i}""" + # 先创建目录 + ssh(f"mkdir -p /opt/act-runner/runner-{i}") + r = ssh(reg_script) print("\n" + "=" * 60) print("步骤5: 创建systemd服务") print("=" * 60) for i in range(1, 7): - service_file = f"/etc/systemd/system/act-runner-{i}.service" service_content = f"""[Unit] Description=Gitea Act Runner {i} After=network.target @@ -92,25 +97,18 @@ RestartSec=5 [Install] WantedBy=multi-user.target """ - # 用base64传内容避免转义问题 content_b64 = base64.b64encode(service_content.encode()).decode() - ssh(f"echo {content_b64} | base64 -d > {service_file} && echo service_{i}_ok") + ssh(f"echo '{content_b64}' | base64 -d > /etc/systemd/system/act-runner-{i}.service && echo svc_{i}_ok") print("\n" + "=" * 60) print("步骤6: 启动所有Runner") print("=" * 60) -start_cmd = """ -systemctl daemon-reload -for i in 1 2 3 4 5 6; do - systemctl enable act-runner-$i.service - systemctl start act-runner-$i.service - echo "act-runner-$i: $(systemctl is-active act-runner-$i.service)" -done -sleep 3 -echo "进程数: $(ps aux | grep act_runner_v0.2.6 | grep -v grep | wc -l)" -ps aux | grep act_runner_v0.2.6 | grep -v grep -""" -ssh(start_cmd.strip()) +ssh("systemctl daemon-reload") +for i in range(1, 7): + ssh(f"systemctl enable act-runner-{i}.service && systemctl start act-runner-{i}.service && echo start_{i}_ok") + +print("\n--- 检查状态 ---") +ssh("sleep 3; ps aux | grep act_runner_v0.2.6 | grep -v grep | wc -l; echo '个进程运行中'; for i in 1 2 3 4 5 6; do systemctl is-active act-runner-$i.service | tr '\\n' ' '; done; echo") print("\n" + "=" * 60) print("全部完成!")