写在前面
主机的 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
端口不需要暴露给外界,所以将其映射到主机的localhost
ports: - "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_keys
cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
-
登录你的
Gitea
,在设置
–SSH / GPG 密钥
中添加你自己的公共密钥 -
如果上述步骤正确执行的话,现在你可以通过 SSH 协议以标准端口免密码克隆项目了