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

GitLab Pipeline(Docker执行器)部署Java应用遇SSH权限拒绝问题

GitLab Pipeline SSH部署权限拒绝问题排查与修复

核心问题定位

你的YAML配置里有个致命错误:在流水线的Docker容器内创建~/.ssh/authorized_keys完全没用,这个文件应该放在目标VM的aminech用户~/.ssh目录下,用来授权流水线的私钥登录。

修复步骤

1. 删掉无效的配置行

把before_script里这行删掉:

- echo ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

这行纯属画蛇添足,只会干扰容器内的SSH环境。

2. 确保私钥完整写入

用printf替代echo写入私钥,避免换行符丢失导致私钥损坏:

- printf "%s" "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa

(原echo命令可能会因为私钥里的换行或特殊字符,导致私钥格式失效)

3. 检查目标VM的公钥授权

手动登录目标VM,确认aminech用户的~/.ssh/authorized_keys文件里已经添加了你配置的$SSH_PUBLIC_KEY内容,同时设置正确的权限:

# 在目标VM上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. 验证目标VM的SSHD配置

确保目标VM的/etc/ssh/sshd_config开启了公钥登录:

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
# 可选:禁用密码登录增强安全性
# PasswordAuthentication no

修改后重启sshd服务:

# Ubuntu/Debian系统
sudo systemctl restart sshd
# CentOS/RHEL系统
sudo systemctl restart sshd.service

5. 优化SSH命令

既然已经配置了known_hosts,就没必要关闭主机密钥检查,保留-v方便调试:

ssh -v aminech@192.168.124.149 "cd ~/Desktop/javapipline && export IMAGE_TAG=${CI_COMMIT_SHORT_SHA} && docker-compose up -d"

修正后的完整YAML

deploy_production:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk add openssh-client
    - mkdir -p ~/.ssh
    - printf "%s" "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - printf "%s" "$SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pub
    - chmod 600 ~/.ssh/id_rsa
    - chmod 644 ~/.ssh/id_rsa.pub
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - echo "$SSH_SERVER_HOSTKEYS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

  script:
    - ssh -v aminech@192.168.124.149 "cd ~/Desktop/javapipline && export IMAGE_TAG=${CI_COMMIT_SHORT_SHA} && docker-compose up -d"

内容的提问来源于stack exchange,提问作者Mohamed Amine Chouchene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:19