前言
如果gitlab直接部署在宿主上,使用ssh克隆没有问题。但是,gitlab部署在容器中就出现这个问题。
开启ssh传输的流程
一般情况下,如果客户机要免密访问gitlab,需要把本机的公钥(.pub)复制到gitlab服务器注册(一般在web界面操作),这样客户机就可以免密访问仓库了。
原因分析
ssh传输都是通过22端口传输的,一般被宿主的sshd服务占用。所以gitlab容器的22端口不能直接映射到宿主的22端口,要换个其他端口,比如222。
这样,通过端口映射,客户端的ssh传输请求就能达到容器中的gitlab服务。
同时,还需要修改gitlab的gitlab_rails[‘gitlab_shell_ssh_port’] = 222并使用命令gitlab-ctl reconfigure命令重新配置。这样,从网页获取的克隆地址就是222端口,通过该端口,客户机ssh请求直达容器内部。