设置 Git 远程 SSH (git-upload-pack / git-receive-pack)

and*_*ert 5 git url ssh git-clone

我有一台具有 SSH 访问权限的服务器,我想在那里放置一个 Git 原始存储库。我刚刚在本地创建了一个 --bare --shared 存储库,并将其复制到每个 SCP 的服务器上。现在我想根据 SSH url 克隆这个存储库。我试过

ssh://USERNAME@HOST/folder1/folder2/gifolder.git
ssh://USERNAME:PASSWORD@HOST/folder1/folder2/gifolder.git
ssh://USERNAME@HOST:PORT/folder1/folder2/gifolder.git
ssh://USERNAME@HOST:/folder1/folder2/gifolder.git
Run Code Online (Sandbox Code Playgroud)

以及以上的一些组合。但 Git 总是说

"fatal: The remote end hung up unexpectedly"
Run Code Online (Sandbox Code Playgroud)

尽管我可以通过 SSH 使用用户名和密码连接到主机。

是否可以按照我想要的方式使用 git,或者我是否必须以完全不同的方式设置它?

更新:

我将 Git 扩展配置为使用 OpenSSH 而不是 Putty,现在 OpenSSH 要求我在“克隆”后输入密码。当我输入正确的密码时,出现以下错误:

bash: git-upload-pack: command not found
Run Code Online (Sandbox Code Playgroud)

(OpenSSH 似乎可以连接到服务器,因为它希望我在输入其他内容时重新输入密码)所以。现在我需要解决这个新问题。首先:我无法在服务器上安装 git。是否可以在不安装 git 的情况下使“git-upload-pack”和“git-receive-pack”可用?

再次感谢

更新2 - 解决方案:

解决方案是将远程存储库目录集成为每个 SSH/SFTP 的本地目录。我正在使用http://www.expandrive.com/来实现此目的。谢谢

Ron*_*acc 5

在执行 ssh 时,您需要远程路径中的二进制文件git-upload-packgit-receive-pack 。

如果没有像这样为存储库中的每个远程链接配置它们

git config remote.origin.uploadpack /somepath/git/git-upload-pack
git config remote.origin.receivepack /somepath/git/git-receive-pack
Run Code Online (Sandbox Code Playgroud)

其中origin是远程的。


Von*_*onC 3

建立 ssh 连接时不需要输入密码:
如果您的公钥发布在 ~/.ssh/authorized_keys 上,这应该足够了。

如果您的私钥受密码短语保护,您可能需要密码(在这种情况下,请参阅“ ssh 守护程序要求密码”,您可能需要密码ssh-agent)。

否则,请参阅“无法将 master 推送到 Github ”以获取更多 ssh 调试技巧,包括:

  • ssh -vvvT ssh://USERNAME@HOST(确保 HOME 已定义,特别是如果您使用的是 Windows:请参阅“ Heroku 推送主ssh问题”)
  • 检查服务器上 sshd 的日志(例如在 中/var/log/secure,但可能会因操作系统而异)

Openssh 是一个更安全的选择(并与 mysysgit 一起打包),但它仍然要求您正确定义 %HOME%。

再次,ssh -vvvT将在这里提供帮助。

首先:我无法在服务器上安装 git。
是否可以在不安装git的情况下使“ git-upload-pack”和“ git-receive-pack”可用?

不,这是不可能的。

gitsshd必须安装,并且位于(ssh服务器上运行的守护程序)的路径中。


OP andineupert在评论中总结道:

由于需要在服务器上安装 git(我无法),我必须将远程 repo-dir 集成为每个 SSH/SFTP 的本地目录。
现在一切正常。