gitlab的git协议端口非默认端口访问
文章目录
参考地址:
git远程添加与其他SSH端口-堆栈溢出 (stackoverflow.com)
一、问题描述
近期公司由于业务需要将版本控制工具从 svn 更改为 gitlab ,再大家沉浸在 快乐的写代码中
时,发现 gitlab的 git 协议都是莫名其妙的 Connection timed out 。
分析了一下原因,可能是因为:公司的网络使用的是内网穿透 tunnel,将所有的代码都控制在本地,这样从一定程度上可以提高代码的安全性;但是由于公司只有一个公网的 ip, git 协议默认走的还是 ssh的 22 端口,这样一样不合就导致了端口冲突;
经过考虑,最终建议大佬,更改一下gitlab 的 git 协议的默认端口,从 22 修改为 10022, perfect!!!
可问题来了,改完之后我们怎么 clone 代码呢???
本片文章就是问了解决这个问题
二、解决方案
2.1、创建ssh的config文件
最好是通过Git Bash命令来创建配置文件:
# 编辑当前用户的ssh config 文件
$ vim ~/.ssh/config
# 将以下内容写入到config文件中
Host gitlab.tunnel.it100.com
Hostname gitlab.tunnel.it100.com
User lijin
Port 10022
IdentityFile ~/.ssh/gitlab
- Host后面的 gdgxkj 或者 gitee.com:别名,后面会使用这个别名做克隆和更新
- Hostname后面的gitlab.tunnel.it100.com 或者gitee.com :表示git服务器的域名或者ip等
- User后面的lijin :表示当前git服务器使用的用户名
- Port 后面的22:表示git服务器的端口,(这个是解决问题的关键)
- IdentityFile : 表示使用密钥的文件(公钥和私钥是成对存在的,公钥的名称是在私钥的文件名称加上.pub)
2.2、在仓库地址上添加端口信息
正常情况下的仓库地址为:git@gitlab.tunnel.it100.com:zhengzhou-hnsrmdbdhcwwyhbgt-lfybascgzpt/hn-system.git
添加端口号之后的仓库地址为:[git@gitlab.tunnel.it100.com:10022]:zhengzhou-hnsrmdbdhcwwyhbgt-lfybascgzpt/hn-system.git
格式为:[git@host:port]:path/to/repo.git
注意: 这种方案要求了本地 git的版本,低版本()的git则会提示如下报错信息:
$ git clone [git@gitlab.tunnel.it100.com:10022]:zhengzhou-hnsrmdbdhcwwyhbgt-lfybascgzpt/hn-system.git
Cloning into 'hn-system'...
ssh: Could not resolve hostname gitlab.tunnel.it100.com:10022: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
经过本地的简单测试 Git for Windows 2.22.0 版本会出现异常,Git for Windows 2.29.2 版本则能正常执行。
如果本地git版本过低,可以使用命令来升级git版本。
$ git update-git-for-windows
2.3、使用系统变量
如果端口更改只是暂时的,您可以告诉 git 使用不同的 SSH 命令,而不是更改存储库的远程 URL,则可以使用如下方式:
linux系统下可以可以如下执行:
# 添加变量
$ export GIT_SSH_COMMAND='ssh -p 10022'
$ git clone git@gitlab.tunnel.it100.com:zhengzhou-hnsrmdbdhcwwyhbgt-lfybascgzpt/hn-system.git
windows系统下可以设置系统变量,然后就可以愉快的执行啦
$ git clone git@gitlab.tunnel.gdgxkj.com:zhengzhou-hnsrmdbdhcwwyhbgt-lfybascgzpt/hn-system.git
注意: 这种方案要求了本地 git的版本,低版本的git则会报错,同时windows 下设置的系统变量不能为临时变量,否则将不会生效
2.3.1、windows10 使用cmd设置环境变量
-
1,打开命令行shift+右键选择在此处打开命令行窗口
-
2,临时环境变量,只有当前命令行有效,重启命令行失效。
set path=C:/MinGW/bin
-
3,永久环境变量,设置后重启命令行生效。
setx path C:/MinGW/bin