From a06c1c0709372da187b6f540bcbe0c7cc8979ef5 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Wed, 24 Jun 2026 01:23:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20setup=5Fssh=20=E7=BB=99=E7=A7=81?= =?UTF-8?q?=E9=92=A5=E8=A1=A5=E7=BB=93=E5=B0=BE=E6=8D=A2=E8=A1=8C=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=98=BF=E9=87=8C=20ed25519=20=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=20key=20"invalid=20format"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Forgejo 存 secret 时会去掉结尾换行,而 OpenSSH 格式私钥(如阿里 ed25519 部署 key)缺结尾换行会被 openssh 判为 "invalid format" 拒绝加载,退化成 无密钥 → Permission denied,导致迁移期 Deploy → Ali 影子轨每次都失败 (因 continue-on-error 不阻塞 EC2、流水线仍显示成功,故未被察觉)。 EC2 那把是 RSA/PEM 对结尾换行宽容,未暴露此问题。 改 printf '%s' → printf '%s\n' 始终补一个结尾换行;对已含换行的 PEM 无害。 已本机端到端复现并验证:去掉结尾换行的 key 经修复后 deploy-server.sh 阿里分支跑通,阿里二进制已与 EC2 一致(sha 7e77ec46)、jiu.service 保持 stopped。 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx --- scripts/ci/lib-forgejo.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/ci/lib-forgejo.sh b/scripts/ci/lib-forgejo.sh index ab09a7c..6d82338 100644 --- a/scripts/ci/lib-forgejo.sh +++ b/scripts/ci/lib-forgejo.sh @@ -114,7 +114,11 @@ setup_ssh() { local host="${DEPLOY_HOST:-$EC2_HOST}" local key="${DEPLOY_SSH_KEY:-$EC2_SSH_KEY}" mkdir -p ~/.ssh - printf '%s' "${key}" > ~/.ssh/ec2_deploy.pem + # `printf '%s\n'` 末尾补一个换行:Forgejo 存 secret 会去掉结尾换行,而 + # OpenSSH 格式私钥(-----BEGIN OPENSSH PRIVATE KEY-----,如阿里 ed25519 部署 key) + # 缺结尾换行会被判为 "invalid format" 而拒绝加载,退化成无密钥 → Permission denied。 + # 多补的换行对已含结尾换行的 PEM(如 EC2 key)无害。 + printf '%s\n' "${key}" > ~/.ssh/ec2_deploy.pem chmod 600 ~/.ssh/ec2_deploy.pem ssh-keyscan -H "${host}" >> ~/.ssh/known_hosts 2>/dev/null SSH="ssh -i ~/.ssh/ec2_deploy.pem -o StrictHostKeyChecking=no"