将新存储库推送到 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-pack
和 git-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;
我最近在 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-pack
和 git-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;