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

家庭实验室Docker部署GitLab后SSH指纹不一致问题求助

问题分析与解决

核心原因

你执行ssh git@gitlab-ssh.xxx时使用了SSH默认的22端口,但Docker容器的SSH服务是映射到宿主机的40022端口,所以这个请求实际连接的是宿主机自身的SSH服务,而非容器内的GitLab SSH服务,因此指纹不匹配。

解决方法

1. 临时解决:连接时指定端口

直接使用自定义端口连接GitLab容器的SSH服务:

ssh -p 40022 git@gitlab-ssh.xxx

此时显示的指纹应该和GitLab页面、容器内的一致。

2. 永久解决:让GitLab自动生成带端口的SSH地址

修改Docker Compose的GitLab配置,添加gitlab_shell_ssh_port参数,让GitLab页面显示的仓库SSH地址自动包含自定义端口:

gitlab:
    image: "gitlab/gitlab-ee:latest"
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['gitlab_ssh_host'] = "gitlab-ssh.xxx"
        gitlab_rails['gitlab_shell_ssh_port'] = 40022  # 添加这一行
    ports:
      - "40080:80"
      - "40022:22"

重启容器后,GitLab页面上的仓库SSH地址会变成类似git@gitlab-ssh.xxx:40022/xxx/xxx.git,复制这个地址连接时就会自动使用正确端口。

3. 可选方案:映射宿主机22端口(需注意冲突)

如果不想使用自定义端口,可以将宿主机的22端口直接映射给容器,但前提是宿主机自身的SSH服务已经修改到其他端口(比如2222),避免端口冲突:

ports:
  - "40080:80"
  - "22:22"

修改后重启容器,即可用默认22端口连接GitLab的SSH服务。

验证方式

进入容器内查看SSH服务的指纹,确认和页面一致:

# 进入GitLab容器
docker exec -it <容器ID/名称> bash
# 查看ED25519指纹
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

再用正确端口连接,对比指纹是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:26