最后一班

This commit is contained in:
吕新雨
2026-02-03 01:21:10 +08:00
parent e6b64b39f2
commit 7fea799087

View File

@@ -87,9 +87,11 @@ jobs:
# 2) base64 值在粘贴/保存过程中混入空白或其他无关字符
if printf '%s' "${SSH_KEY_B64}" | grep -qE 'BEGIN[[:space:]].*PRIVATE[[:space:]]KEY'; then
echo "提示:检测到 *_SSH_KEY_B64 看起来是原始私钥内容,将按原始私钥写入(建议你改用真正的 base64 单行值)。"
echo "SSH_KEY_B64 字符数(原始):${#SSH_KEY_B64}"
printf '%s' "${SSH_KEY_B64}" | tr -d '\r' > "${SSH_KEY_PATH}"
else
CLEAN_B64="$(printf '%s' "${SSH_KEY_B64}" | tr -d '\r\n\t ')"
echo "SSH_KEY_B64 字符数(原始/清理后):${#SSH_KEY_B64}/${#CLEAN_B64}"
if ! printf '%s' "${CLEAN_B64}" | base64 -d -i | tr -d '\r' > "${SSH_KEY_PATH}"; then
echo "私钥 base64 解码失败:"
echo "- 请确认你在 Gitea Secrets 配置的 *_SSH_KEY_B64 是“单行 base64 字符串”,不要带引号/前后空格。"
@@ -98,19 +100,60 @@ jobs:
fi
fi
else
echo "使用 SSH_KEY原始私钥写入。SSH_KEY 字符数:${#SSH_KEY}"
printf '%s' "${SSH_KEY}" | tr -d '\r' > "${SSH_KEY_PATH}"
fi
chmod 600 "${SSH_KEY_PATH}"
# 自检(不输出私钥内容,仅输出元信息,方便定位是否写入了错误文件/被截断)
echo "SSH_KEY_PATH=${SSH_KEY_PATH}"
echo "SSH key 字节数:$(wc -c < "${SSH_KEY_PATH}" | tr -d ' ')"
KEY_BYTES="$(wc -c < "${SSH_KEY_PATH}" | tr -d ' ')"
KEY_LINES="$(wc -l < "${SSH_KEY_PATH}" | tr -d ' ')"
echo "SSH key 字节数:${KEY_BYTES}"
echo "SSH key 行数:${KEY_LINES}"
echo "SSH key 首行:$(head -n 1 "${SSH_KEY_PATH}" | tr -d '\r')"
echo "SSH key 末行:$(tail -n 1 "${SSH_KEY_PATH}" | tr -d '\r')"
if command -v stat >/dev/null 2>&1; then
# Ubuntu runner: stat -c不同系统做兼容
if stat -c '%a %U %G %n' "${SSH_KEY_PATH}" >/dev/null 2>&1; then
echo "SSH key 权限:$(stat -c '%a %U %G %n' "${SSH_KEY_PATH}")"
else
echo "SSH key 权限:$(stat -f '%Lp %Su %Sg %N' "${SSH_KEY_PATH}" 2>/dev/null || true)"
fi
fi
if command -v file >/dev/null 2>&1; then
echo "file(1) 识别:$(file "${SSH_KEY_PATH}")"
fi
if command -v sha256sum >/dev/null 2>&1; then
echo "SSH key sha256(前12位)$(sha256sum "${SSH_KEY_PATH}" | awk '{print substr($1,1,12)}')"
fi
# 进一步校验OpenSSH 私钥中间的 base64 块是否可解码(不输出内容)
if grep -q '^-----BEGIN OPENSSH PRIVATE KEY-----$' "${SSH_KEY_PATH}" && grep -q '^-----END OPENSSH PRIVATE KEY-----$' "${SSH_KEY_PATH}"; then
OPENSSH_B64_LEN="$(awk '
BEGIN{in=0; n=0}
/^-----BEGIN OPENSSH PRIVATE KEY-----$/{in=1; next}
/^-----END OPENSSH PRIVATE KEY-----$/{in=0; exit}
in==1{gsub(/\r/,""); n+=length($0)}
END{print n}
' "${SSH_KEY_PATH}")"
echo "OpenSSH base64 块字符数(合计):${OPENSSH_B64_LEN}"
if ! awk '
BEGIN{in=0}
/^-----BEGIN OPENSSH PRIVATE KEY-----$/{in=1; next}
/^-----END OPENSSH PRIVATE KEY-----$/{in=0; exit}
in==1{gsub(/\r/,""); print}
' "${SSH_KEY_PATH}" | tr -d '\n' | base64 -d >/dev/null 2>&1; then
echo "OpenSSH 私钥的 base64 块无法解码:疑似内容被截断/损坏(即使首尾行还在)。"
fi
fi
# 额外信息ssh-keygen -lf 的报错(不输出私钥内容)
if ! ssh-keygen -lf "${SSH_KEY_PATH}" >/dev/null 2>~/.ssh/ssh_key_fingerprint.err; then
echo "ssh-keygen -lf 报错:"
cat ~/.ssh/ssh_key_fingerprint.err || true
fi
# 快速校验私钥是否可解析(不会输出私钥内容)
if ! ssh-keygen -y -f "${SSH_KEY_PATH}" >/dev/null 2>~/.ssh/ssh_key_check.err; then
echo "SSH 私钥无法解析。下面是 ssh-keygen 的报错(不包含私钥内容):"