Gitea 的 SSH 容器直通配置

G

写在前面

主机的 22 端口默认运行着 sshd 服务,而我们通过 SSH 协议克隆项目时默认也要通过 22 端口,这样就起了冲突。
老猪我不想在非标准端口上运行 sshd,因此上一讲在 Docker 中安装 Gitea 时,选择将容器的 22 端口映射到了主机的 2221 端口。
但是这样一来,当我们通过 SSH 协议克隆项目时,就必须要指定端口号了,这样很不清真,老猪我表示拒绝。
我们可以设置一个转发,克隆项目时自动将 SSH 连接从主机转发到容器,这样问题就迎刃而解。

具体步骤

  1. 你先要在主机创建一个名为 git 的用户

  2. 使用 git 用户创建 SSH 密钥对

    sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
  3. 执行 id git 命令查看 uid 和 gid

    martincz@DiskStation:~$ id git
    uid=1036(git) gid=100(users) groups=100(users),101(administrators)
  4. 通过 Portainer 修改 GiteaStack 并保存

    environment 中的 USER_UIDUSER_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"
  5. 在主机上创建一个名为 /usr/local/bin/gitea 的文件,该文件将发出从主机到容器的 SSH 转发,文件内容如下

    ssh -p 2221 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
  6. 授予 /usr/local/bin/gitea 可执行权限

    chmod a+x /usr/local/bin/gitea
  7. 将上面创建的 Gitea Host Key 中的公共密钥添加到 /home/git/.ssh/authorized_keys

    cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
  8. 登录你的 Gitea,在 设置SSH / GPG 密钥 中添加你自己的公共密钥

  9. 如果上述步骤正确执行的话,现在你可以通过 SSH 协议以标准端口免密码克隆项目了

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
By 马丁龙猪

标签

归档

其他操作