将新存储库推送到 Synology git 服务器时出现问题

Problems pushing a new repo to Synology git server

我最近在 Synology NAS 上设置了 git(DS2220j 如果这有什么不同的话)并且已经成功地设置了诸如使用 public 密钥等,并且可以将更新推送到存储库存在于 Synology 服务器本身。

我的设置是我自己在 Synology 驱动器上的用户在其主目录中有一个 git 目录。我 运行 下面创建一个 repo:

ssh user@NAS
cd git
git init --bare repo.git

然后我可以在本地运行

cd repo
git remote add origin user@NAS:git/repo.git
git push --set-upstream origin master

这会将我的存储库推送到 git 服务器。我的问题是我希望能够跳过 ssh 进入 Synology 驱动器的初始步骤,因为我实际上并不希望能够以我的用户身份直接 ssh 进入交互式 shell。但是,如果我跳过这一步,我会得到以下输出:

fatal: 'git/repo.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

在某些 git 服务器上,配置中有一行允许推送新的存储库,但我看不到 Synology 套件中心中包含的服务器的任何文档(这就是我使用)和各种教程显示它只是工作。一个教程显示在您希望推送回购的文件夹中创建一个裸 _template.git,我已经尝试过,但这似乎没有任何效果。

您可以通过为该密钥设置该用户的 ~/.ssh/authorized-keys 文件来完全控制允许 user/key 组合执行的操作。放

command="bin/checkcommand" ssh-ed25519 AAAAC3NklC1wZDI1NTE5AAAAIH5NBbarfcodeFWkCC6KKU8qYLBNpnYWXHpxwcTKBesu you@example.com

在其中,每当您使用该密钥作为该用户登录时,他们的 bin/checkcommand 将 运行 和 SSH_ORIGINAL_COMMAND 设置为 ssh 命令行上的任何内容,所以你基本上必须做一些简单的命令解析来允许 evengit-upload-packgit-receive-pack 如果你想让它们能够获取或推送。

man sshd 并在 command= 中搜索我抄袭的入门工具包,我没有检查过,但我敢打赌 gitolite 等正是使用这种机制。

bin/checkcommand 可能看起来有点像这样,但是如果有一个命令白名单,它将 运行,而不是 运行ning 任何你扔给它的东西:

#!/bin/bash -e
set -o pipefail;

echo command="${SSH_ORIGINAL_COMMAND}" >> ~/.ssh/log; 

# Up to the first space is the command
case $(echo "${SSH_ORIGINAL_COMMAND}" | cut -f 1 -d ' ') in
    "git-receive-pack" | "git-upload-pack")
        # Second part is the git directory, contained within quotes
        GITDIR="$( \
            echo "${SSH_ORIGINAL_COMMAND}" \
                | cut -f 2- -d " " \
                | cut -f 2 -d "'" \
        )";
        echo "git at ${GITDIR}" >> ~/.ssh/log;

        if [ ! -d ${GITDIR} ]; then
            git init --bare ${GITDIR} 2>&1 >> ~/.ssh/log;
        fi
    ;;  
esac

bash -c "${SSH_ORIGINAL_COMMAND}" | tee -a ~/.ssh/log;