如何自动将GitLab仓库同步到使用SSH认证的远程服务器
配置遗漏环节说明
核心方案选型错误
GitLab自带的仓库镜像功能仅用于两个Git托管服务实例之间的仓库同步,你的AWS Ubuntu服务器是业务部署节点,本身没有部署Git托管服务,无法作为镜像的目标端,这是最根本的问题。
第一次HTTPS配置的遗漏点
- 你的AWS EC2实例安全组没有开放443端口的入站规则,且Ubuntu服务器本身也没有部署支持HTTPS访问的Git托管服务,导致GitLab的访问请求直接被拒绝。
- 填写的HTTPS地址仅包含域名,没有指向具体的Git仓库路径,不符合Git仓库URL的语法规范。
第二次SSH配置的遗漏点
- SSH协议的Git URL必须包含目标仓库的绝对路径,正确格式为
ssh://<用户名>@<服务器地址/域名>/<服务器上的裸仓库绝对路径>,你未填写路径直接触发语法错误。 - SSH协议的Git认证不支持在URL中明文携带密码,必须通过SSH密钥对完成认证,你在URL中拼接密码的方式本身不符合SSH Git的使用规则。
- 你没有提前在Ubuntu服务器上初始化对应项目的裸Git仓库,也没有配置
post-receive钩子实现推送后自动同步代码到部署目录,即使镜像推送成功也无法实现自动更新部署内容的需求。
可行的实现方案
你可以通过GitLab CI/CD功能实现需求,操作步骤如下:
- 在AWS Ubuntu服务器上生成专用的SSH密钥对,将公钥添加到对应用户的
~/.ssh/authorized_keys文件中,同时放开服务器安全组22端口对GitLab CI Runner IP的入站权限。 - 在GitLab项目的「设置- CI/CD - 变量」页面,添加服务器地址、SSH用户名、SSH私钥为保密变量,避免敏感信息泄露。
- 在项目根目录新建
.gitlab-ci.yml文件,配置规则为推送指定分支后,通过SSH连接到Ubuntu服务器,进入部署目录执行git pull拉取最新代码即可完成自动更新。
内容的提问来源于stack exchange,提问作者Malik
相关产品推荐
相关产品推荐

