自建GitLab推送需用户名密码,但ssh -T连接正常求助
GitLab Docker部署后无法推送代码(SSH/HTTP均要求密码)
问题描述
- 通过
gitlab/gitlab-ce镜像部署GitLab后,SSH连接验证正常:
root@saeed:/home/node# ssh -T git@git.mydomain.ir -p2222 Welcome to GitLab, @root!
- 执行推送命令时,系统要求输入
git用户密码,即使已添加SSH密钥:
root@saeed:/home/node# git init --initial-branch=main; git remote add origin git@git.mydomain.ir:root/public-node.git; git add app.js; git commit -m 'init'; git push -u origin main git@git.mydomain.ir's password:
- HTTP方式推送同样要求输入密码。
当前docker-compose.yml配置
version: '3.6' services: web: image: gitlab/gitlab-ce:latest restart: always hostname: git environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://git.mydomain.ir' GITLAB_HOST: 'http://git.mydomain.ir' GITLAB_ROOT_PASSWORD: 'SomePass' EXTERNAL_VALIDATION_SERVICE_TIMEOUT: 600 ports: - '80:80' - '443:443' - '2222:22' volumes: - './config:/etc/gitlab' - './logs:/var/log/gitlab' - './data:/var/opt/gitlab'
解决方案
1. 修正SSH远程仓库地址的端口问题
你当前的远程地址git@git.mydomain.ir:root/public-node.git默认使用22端口,但Docker映射的是2222端口。Git的SSH地址默认端口为22,需显式指定端口:
# 删除原有远程仓库 git remote remove origin # 添加带端口的远程地址 git remote add origin ssh://git@git.mydomain.ir:2222/root/public-node.git # 重新推送 git push -u origin main
也可直接修改本地仓库的.git/config文件,将url字段改为:
url = ssh://git@git.mydomain.ir:2222/root/public-node.git
2. 检查GitLab容器内的SSH配置
进入GitLab容器,确认SSH服务配置正确:
# 进入容器(替换为你的容器名称/ID) docker exec -it <container-name-or-id> bash # 查看sshd监听端口 cat /etc/ssh/sshd_config | grep Port
确保容器内sshd监听端口为22(与Docker端口映射的内部端口一致),若需强制禁用密码登录,可将PasswordAuthentication设置为no。
3. 解决HTTP推送的密码问题
HTTP推送要求密码通常是因为未使用个人访问令牌,或账号权限配置问题:
- 登录GitLab网页,生成个人访问令牌,勾选
read_repository和write_repository权限;推送时用户名填GitLab账号,密码填该令牌。 - 确认
external_url配置正确,确保HTTP请求能正确路由到GitLab服务。
4. 验证仓库权限
确认当前GitLab账号(@root)对root/public-node.git仓库拥有开发者及以上权限:
登录GitLab网页,进入仓库的「设置」→「成员」,检查账号权限等级。
5. 重启GitLab容器
修改配置后,重启容器使设置生效:
docker-compose restart web
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

