ci: 分层诊断 SSH secret
Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 10s

This commit is contained in:
cheney 2026-07-16 13:59:37 +08:00
parent 79a5875758
commit 6573ba8c9f

View File

@ -38,23 +38,44 @@ jobs:
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
# 关闭 -e先打印诊断信息避免任何一步失败导致后续诊断也丢
set +e
mkdir -p ~/.ssh
# 写入并去除可能被 secret 引入的 CR避免 openssh 解析失败
echo "===== 诊断 1secret 是否非空 ====="
# 只打印字节长度,绝对不会泄漏内容
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 "===== 诊断 3ssh-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 "===== 诊断 4known_hosts ====="
ssh-keyscan -H "${DEPLOY_HOST}" >> ~/.ssh/known_hosts 2>&1
echo "known_hosts 行数: $(wc -l < ~/.ssh/known_hosts)"
- name: 上传 start.sh 到部署目录
run: |
# 强制仅用密钥认证 + 详细日志password 认证禁用后仍失败会直接抛错