You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从GitLab仓库部署代码至远程服务器遇权限拒绝错误求助

GitLab CI/CD SSH部署权限拒绝问题排查

可能遗漏的配置及解决方法

1. 私钥格式或解码问题

你使用base64 -d解码私钥,需确认存入CI/CD变量SSH_PRIVATE_KEY的内容确实是base64编码后的私钥。若当初直接复制未编码的私钥到变量,解码后会导致私钥损坏,触发error in libcrypto错误。

  • 若私钥未编码,去掉解码步骤,直接写入:
    echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    
  • 若需编码,本地重新生成base64格式的私钥后替换变量值:
    cat ~/.ssh/id_rsa | base64 -w 0
    

2. .ssh目录及文件权限不全

仅设置id_rsa权限为600不够,.ssh目录本身权限必须为700,否则SSH会拒绝使用该目录下的密钥。

  • 在before_script中添加目录权限配置:
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - install -m 600 -D /dev/null ~/.ssh/id_rsa
    - echo "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa  # 根据实际情况决定是否保留解码
    - ssh-keyscan -H $SSH_HOST >> ~/.ssh/known_hosts  # 用>>避免覆盖已有主机记录
    

3. 私钥带有密码短语

若SSH私钥设置了密码,CI环境无法自动解密,会导致加载密钥失败。

  • 重新生成无密码的部署密钥(本地执行):
    ssh-keygen -t rsa -b 4096 -C "deployer@gitlab-ci" -N "" -f ~/.ssh/id_rsa_deploy
    
    将新私钥存入CI/CD变量,公钥替换远程服务器authorized_keys中的旧内容。

4. 远程服务器权限配置错误

远程服务器上deployer用户的.ssh目录权限必须为700,authorized_keys权限必须为600,否则SSH会忽略公钥认证。

  • 登录远程服务器执行:
    sudo su - deployer
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

5. 使用ssh-agent托管密钥(更稳定)

Alpine环境中直接写入id_rsa可能因环境变量问题无法被SSH识别,用ssh-agent托管密钥更可靠。

  • 修改before_script为:
    - apk update && apk add openssh-client
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -  # 根据实际情况决定是否保留解码
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - ssh-keyscan -H $SSH_HOST >> ~/.ssh/known_hosts
    

内容的提问来源于stack exchange,提问作者Roberto Jobet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:22:18