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

Docker部署GitLab后SSH克隆失败问题求助

解决Docker部署GitLab的SSH克隆失败问题

结合你给出的报错信息和环境配置,核心问题大概率是Docker容器内的sshd服务因权限异常无法正常对外响应请求,我整理了几个针对性的排查和修复步骤:

1. 修复容器内sshd的supervise目录权限

你看到的warning: sshd: unable to open supervise/ok: access denied是关键线索——GitLab的进程管理工具无法访问sshd的supervise目录,导致服务无法正常启动或响应。进入容器修复权限:

# 进入GitLab容器
docker exec -it gitlab /bin/bash
# 修复supervise目录的权限
chmod 755 /var/run/supervise/sshd
chown root:root /var/run/supervise/sshd
# 重启sshd服务
gitlab-ctl restart sshd
# 或者直接重启整个容器确保配置生效
exit
docker restart gitlab

2. 确认GitLab的SSH端口配置正确

确保GitLab生成的SSH克隆链接使用的是你映射的22端口,进入容器后编辑配置文件:

docker exec -it gitlab vi /etc/gitlab/gitlab.rb

找到并确认以下配置(如果没有就添加):

gitlab_rails['gitlab_shell_ssh_port'] = 22

保存后执行重新配置命令,让修改生效:

gitlab-ctl reconfigure

3. 验证主机端口监听状态

确认主机的22端口确实被Docker代理监听,而非主机自身的sshd(你已经把主机sshd端口改到10022了):

netstat -tulpn | grep 22

正常输出应该显示docker-proxy在监听0.0.0.0:22,如果看到sshd占用22端口,检查/etc/ssh/sshd_config里的Port是否为10022,然后重启主机sshd:

systemctl restart sshd

4. 用详细日志排查连接细节

在本地执行带 verbose 参数的SSH测试,获取更详细的连接过程,定位具体失败环节:

ssh -v git@git.xxxx.com

或者用verbose模式执行克隆命令:

git clone -v git@git.xxxx.com:yphc/dt-dd-miniprogram.git

从日志里你能清晰看到是连接阶段被拦截,还是身份验证环节出了问题。

5. 查看容器内sshd的实时日志

进入容器查看sshd的实时日志,观察连接请求到达后的具体错误信息:

docker exec -it gitlab tail -f /var/log/gitlab/sshd/current

这里会记录所有sshd的请求细节,比如密钥验证失败、权限不足等问题,帮你进一步缩小排查范围。

另外你提到关闭防火墙后报错变化,这说明防火墙开启时可能拦截了连接请求,关闭后请求能到达容器,但因为sshd的权限问题无法完成身份交换,所以才会出现ssh_exchange_identification: Connection closed by remote host——优先修复sshd的权限问题应该能解决核心故障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:32