家庭实验室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
相关产品推荐
相关产品推荐

