From 6573ba8c9f5b172f6883a5907dfdc0bd5192bfd0 Mon Sep 17 00:00:00 2001 From: cheney Date: Thu, 16 Jul 2026 13:59:37 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E5=88=86=E5=B1=82=E8=AF=8A=E6=96=AD=20SS?= =?UTF-8?q?H=20secret?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy.yml | 41 ++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 1c9b4d2..a0f64b9 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -38,23 +38,44 @@ jobs: env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} run: | + # 关闭 -e,先打印诊断信息,避免任何一步失败导致后续诊断也丢 + set +e mkdir -p ~/.ssh - # 写入并去除可能被 secret 引入的 CR,避免 openssh 解析失败 + + echo "===== 诊断 1:secret 是否非空 =====" + # 只打印字节长度,绝对不会泄漏内容 + BYTES=$(printf '%s' "${SSH_PRIVATE_KEY}" | wc -c) + echo "SSH_PRIVATE_KEY 字节数: ${BYTES}" + if [ "${BYTES}" -lt 100 ]; then + echo "❌ secret 内容小于 100 字节,几乎肯定没配置或名字对不上" + echo "请到 Gitea 仓库 → Settings → Actions → Secrets 确认存在名为 SSH_PRIVATE_KEY 的 secret" + exit 1 + fi + + echo "===== 诊断 2:写入文件并去 CR =====" printf '%s\n' "${SSH_PRIVATE_KEY}" | tr -d '\r' > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key - ssh-keyscan -H "${DEPLOY_HOST}" >> ~/.ssh/known_hosts 2>/dev/null - # 诊断:不打印私钥内容,只打印结构,便于定位 secret 是否损坏 - echo "---私钥文件行数与首末行(不含中间敏感内容)---" - wc -l ~/.ssh/deploy_key - head -n 1 ~/.ssh/deploy_key - tail -n 1 ~/.ssh/deploy_key - # 通过 ssh-keygen 校验私钥合法性并派生公钥指纹 + echo "文件字节数: $(wc -c < ~/.ssh/deploy_key)" + echo "文件行数: $(wc -l < ~/.ssh/deploy_key)" + echo "首行: $(head -n 1 ~/.ssh/deploy_key)" + echo "末行: $(tail -n 1 ~/.ssh/deploy_key)" + + echo "===== 诊断 3:ssh-keygen 校验私钥 =====" ssh-keygen -y -f ~/.ssh/deploy_key > ~/.ssh/deploy_key.pub - echo "---派生公钥指纹(把公钥追加到部署机 authorized_keys)---" + KEYGEN_EXIT=$? + if [ ${KEYGEN_EXIT} -ne 0 ]; then + echo "❌ ssh-keygen 校验失败(exit=${KEYGEN_EXIT}),私钥格式坏了" + exit 1 + fi + echo "公钥指纹:" ssh-keygen -l -f ~/.ssh/deploy_key.pub - echo "---派生公钥内容(可直接 append 到部署机 ~/.ssh/authorized_keys)---" + echo "公钥内容(把这一行追加到部署机 ~/.ssh/authorized_keys):" cat ~/.ssh/deploy_key.pub + echo "===== 诊断 4:known_hosts =====" + ssh-keyscan -H "${DEPLOY_HOST}" >> ~/.ssh/known_hosts 2>&1 + echo "known_hosts 行数: $(wc -l < ~/.ssh/known_hosts)" + - name: 上传 start.sh 到部署目录 run: | # 强制仅用密钥认证 + 详细日志,password 认证禁用后仍失败会直接抛错