写在前面
主机的 22 端口默认运行着 sshd 服务,而我们通过 SSH 协议克隆项目时默认也要通过 22 端口,这样就起了冲突。
老猪我不想在非标准端口上运行 sshd,因此上一讲在 Docker 中安装 Gitea 时,选择将容器的 22 端口映射到了主机的 2221 端口。
但是这样一来,当我们通过 SSH 协议克隆项目时,就必须要指定端口号了,这样很不清真,老猪我表示拒绝。
我们可以设置一个转发,克隆项目时自动将 SSH 连接从主机转发到容器,这样问题就迎刃而解。
具体步骤
-
你先要在主机创建一个名为
git的用户 -
使用 git 用户创建 SSH 密钥对
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key" -
执行
id git命令查看 uid 和 gidmartincz@DiskStation:~$ id git uid=1036(git) gid=100(users) groups=100(users),101(administrators) -
通过 Portainer 修改
Gitea的Stack并保存将
environment中的USER_UID和USER_GID修改成刚才得到的值。environment: - USER_UID=1036 - USER_GID=100将主机
git用户的.ssh文件夹映射到容器volumes: - /home/git/.ssh/:/data/git/.ssh因为
2221端口不需要暴露给外界,所以将其映射到主机的localhostports: - "127.0.0.1:2221:22" -
在主机上创建一个名为
/usr/local/bin/gitea的文件,该文件将发出从主机到容器的SSH转发,文件内容如下ssh -p 2221 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@" -
授予
/usr/local/bin/gitea可执行权限chmod a+x /usr/local/bin/gitea -
将上面创建的
Gitea Host Key中的公共密钥添加到/home/git/.ssh/authorized_keyscat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys -
登录你的
Gitea,在设置–SSH / GPG 密钥中添加你自己的公共密钥 -
如果上述步骤正确执行的话,现在你可以通过 SSH 协议以标准端口免密码克隆项目了
