fix(deploy): setup_ssh 给私钥补结尾换行,修复阿里 ed25519 部署 key "invalid format"
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user