在使用 frp 穿透 gitlab 的 ssh 服务前首先要明白两点:
1.gitlab 的 ssh 服务默认运行在 22 端口
2.gitlab 的 ssh 服务必须运行在非 22 端口才能在使用 SSH 克隆的位置产生端口号和 ssh 协议头
因此想正常使用 SSH 克隆就只有一个办法——穿透的远程端口(remote port)和本地端口保持一致。
但是在大部分 frp 服务中都不开放低于 10000 的端口号,而且即使使用自己的 frps 服务器也依然不推荐使用 22 端口直接转发,这可能导致冲突或者其他安全问题。
因此我们需要将 gitlab 的 ssh 服务改为大于 10000 小于 65535 的端口,并确保 frp 服务器上该端口空闲,这只需在/etc/gitlab/gitlab.rb 中找到以下语句或直接将其添加至 gitlab.rb 文件
gitlab_rails['gitlab_ssh_host'] = 'host' # 内网穿透服务端域名或IP
gitlab_rails['gitlab_ssh_user'] = 'git' # 访问ssh使用的用户,一般是git,可以不写这条
gitlab_rails['gitlab_shell_ssh_port'] = port # ssh服务的端口号使用以下命令重载 gitlab 配置文件,并重启 gitlab 服务
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart最后使用内网穿透(如 frp)将相应端口穿透即可
在使用 ssh 之前需要先生成 ssh 密钥,并将公钥添加至自己的 gitlab 账户,gitlab 提供了多种加密方式,可参考下面链接的文档选择合适的加密方式:
在终端(或者 CMD)中使用以下命令生成 ssh 密钥:
ssh-keygen -t ed25519 -C "<comment>"其中 <comment> 是注释,可以使用邮箱做注释;生成密钥的过程中可以选择密钥存储位置(回车默认存储在 ~/.ssh/id_ 加密方式)和验证密码(建议输入启用验证密码,直接回车则为空),生成密钥完成后进入提示给出的 pub 公钥位置,将公钥复制并粘贴到 gitlab 的 SSH Keys 设置中。
可以使用以下命令在其他设备测试是否成功穿透:
ssh -T ssh://host:port第一次使用会遇到图 1 所示情况:

图 1
输入 yes,然后连接会被关闭,再输入一次命令并根据提示输入验证密码即可成功访问(如图 2)。

图 2
默认评论
Halo系统提供的评论