我有一个 git 服务器,我已经站起来了。这是一个基本的存储库,所有远程存储库都存储在
/mygit/repo/
我可以使用此 ssh 语法推送和拉取以及所有其他 git 内容
ssh://git@myserver/mygit/repo/proj.git
但是,由于情况的原因,我需要能够使用此 ssh 语法执行相同的操作
ssh://git@myserver:2200/proj.git
现在我陷入了困境,我尝试使用 apache 作为重定向代理来将 / 扩展为 /mygit/repo 在我的 .conf 下的 conf.d 下使用它
Listen 2200
<VirtualHost *:2200>
RedirectMatch "^/$" "/mygit/repo/"
DocumentRoot "/mygit/repo/"
</VirtualHost>
我尝试使用AllowCONNECT 22尝试将git服务器上的端口2200端口转发到22,同时扩展文件路径。
答案1
好吧,我设法找出答案。一切都需要以 root 身份完成,才能使 chroot 监禁的 git 存储库正常工作。所以首先要做的是设置一个 chroot 监狱目录
/git/server/repos
这个方便的指南展示了该过程是如何完成的https://www.howtoing.com/restrict-ssh-user-to-directory-using-chrooted-jail/ 一旦你为 git 用户建立了 chroot 监狱,你就可以配置 sshd_config 并添加
Port 2200
重新启动 sshd 服务。然后,您需要将 usr 目录和 bin 添加到 chroot 监狱并移动 git 命令。
mkdir -p usr/bin
cp -v /usr/bin/git* /usr/bin/
git 命令需要一些库文件,因此在 bin 目录中的命令上运行 ldd 将为您提供 lib 文件的名称。
ldd /usr/bin/git
我拥有并复制的 lib 文件是
cp -v /lib64/libz.so.1/lib64/
现在您按照正常方式创建 git 存储库,但它必须与其他所有内容一样具有 root 权限,然后您
chmod -R 777 mygitrepo.git
现在,您的 chroot git 用户可以使用语法下的 git 命令从存储库中推送和拉取
ssh://git@myserver:2200/mygitrepo.git
如果 git 没有被 chroot 监禁,而不是绝对路径
ssh://git@myserver:2200/git/server/repos/mygitrepo.git