u
This commit is contained in:
@@ -81,12 +81,22 @@ jobs:
|
||||
|
||||
# 写入私钥
|
||||
if [[ -n "${SSH_KEY_B64:-}" ]]; then
|
||||
# 去掉粘贴过程中可能混入的空白字符(换行/回车/空格/Tab)
|
||||
# 避免出现:base64: invalid input
|
||||
CLEAN_B64="$(printf '%s' "${SSH_KEY_B64}" | tr -d '\r\n\t ')"
|
||||
if ! printf '%s' "${CLEAN_B64}" | base64 -d | tr -d '\r' > ~/.ssh/id_rsa; then
|
||||
echo "私钥 base64 解码失败:请确认你配置的 *_SSH_KEY_B64 是对私钥文件做的 base64(单行),且未被截断。"
|
||||
exit 1
|
||||
# 兼容两种常见误配置:
|
||||
# 1) *_SSH_KEY_B64 里其实粘贴的是“原始私钥”(包含 -----BEGIN ... PRIVATE KEY-----)
|
||||
# 2) base64 值在粘贴/保存过程中混入空白或其他无关字符
|
||||
if printf '%s' "${SSH_KEY_B64}" | grep -qE 'BEGIN[[:space:]].*PRIVATE[[:space:]]KEY'; then
|
||||
echo "提示:检测到 *_SSH_KEY_B64 看起来是原始私钥内容,将按原始私钥写入(建议你改用真正的 base64 单行值)。"
|
||||
printf '%s' "${SSH_KEY_B64}" | tr -d '\r' > ~/.ssh/id_rsa
|
||||
else
|
||||
# 去掉粘贴过程中可能混入的空白字符(换行/回车/空格/Tab)
|
||||
CLEAN_B64="$(printf '%s' "${SSH_KEY_B64}" | tr -d '\r\n\t ')"
|
||||
# -i/--ignore-garbage:忽略非 base64 字符,提升兼容性;最终仍会用 ssh-keygen 校验私钥可用性
|
||||
if ! printf '%s' "${CLEAN_B64}" | base64 -d -i | tr -d '\r' > ~/.ssh/id_rsa; then
|
||||
echo "私钥 base64 解码失败:"
|
||||
echo "- 请确认你在 Gitea Secrets 配置的 *_SSH_KEY_B64 是“单行 base64 字符串”,不要带引号/前后空格。"
|
||||
echo "- 推荐用仓库里的脚本生成并复制:node scripts/ssh-key-to-b64.mjs ~/.ssh/你的私钥 --clipboard"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
printf '%s' "${SSH_KEY}" | tr -d '\r' > ~/.ssh/id_rsa
|
||||
@@ -94,9 +104,16 @@ jobs:
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
|
||||
# 快速校验私钥是否可解析(不会输出私钥内容)
|
||||
if ! ssh-keygen -y -f ~/.ssh/id_rsa >/dev/null 2>&1; then
|
||||
echo "SSH 私钥无法解析(常见原因:内容复制丢换行/截断、格式不兼容、或 base64 不正确)。"
|
||||
echo "推荐:生成一把“无口令”的部署专用私钥,并用 base64 存储到 Secrets。"
|
||||
if ! ssh-keygen -y -f ~/.ssh/id_rsa >/dev/null 2>~/.ssh/ssh_key_check.err; then
|
||||
echo "SSH 私钥无法解析。下面是 ssh-keygen 的报错(不包含私钥内容):"
|
||||
cat ~/.ssh/ssh_key_check.err || true
|
||||
echo
|
||||
echo "常见原因:"
|
||||
echo "- 你填的是公钥(.pub),不是私钥"
|
||||
echo "- 私钥带口令(CI 无法交互输入 passphrase)"
|
||||
echo "- 内容复制丢换行/被截断/不是正确的 base64"
|
||||
echo
|
||||
echo "推荐:生成一把“无口令”的部署专用私钥,并用 base64 存储到 Secrets(*_SSH_KEY_B64)。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user