10

我在我的 macbook 上设置了 SSH 隧道,就像这样......

$ ssh -o ServerAliveInterval=3 -N -L 22222:gitosis-server:22 user@firewall.domain.com

所以我可以 ssh 到 localhost:22222 并最终在防火墙后面的 gitosis-server 上。

我创建了一个本地 id_rsa.pub 文件,将其复制到 gitosis 服务器(运行 Centos5),然后使用...将其导入 gitosis

# sudo -H -u gitosis gitosis-init

这是成功的,因为我可以在 /var/lib/gitosis/.ssh/authorized_keys 中看到公钥。

回到我的 macbook,我设置了一个 ~/.ssh/config 文件,其中包含以下内容......

主机 gitosis-server
主机名本地主机
HostKeyAlias gitosis-server.domain.com
  端口 22222

所以......我认为这个命令应该工作......

$ git clone gitosis@gitosis-server:gitosis-admin.git

然而,当它要求输入密码时,它不会......当公钥应该工作时。

在 /Users/USER/Development/gitrepo/gitosis-admin/.git/ 中初始化空的 Git 存储库
gitosis@localhost 的密码:

关于让 git 通过防火墙后的 gitosis 服务器工作的任何想法?

谢谢,
马特


编辑 - 从 SSH 尝试添加调试

我做了这个命令,'ssh -vvv gitosis@gitosis-server'。我得到了一些调试,它似乎不喜欢我的身份。

debug2:键:/Users/USER/.ssh/id_rsa.gitosis (0x1019b0)
debug1:可以继续的身份验证:publickey、gssapi-with-mic、password
debug3:重新开始,传递了不同的列表 publickey、gssapi-with-mic、password
debug3:首选公钥、键盘交互、密码
debug3: authmethod_lookup 公钥
debug3:剩余首选:键盘交互,密码
debug3:authmethod_is_enabled 公钥
debug1:下一个认证方式:publickey
debug1:提供公钥:/Users/USER/.ssh/id_rsa.gitosis
调试3:send_pubkey_test
debug2:我们发送了一个公钥包,等待回复
debug1:可以继续的身份验证:publickey、gssapi-with-mic、password
debug2:我们没有发送数据包,禁用方法
debug3:authmethod_lookup 密码
debug3:剩余首选:,密码
debug3:authmethod_is_enabled 密码
debug1:下一个认证方式:密码
gitosis@localhost 的密码:

编辑 2

好的...肯定是一个坏键。我再次检查了所有的密钥,当然发现 gitosis-server 在 authorized_keys 文件中持有一个错误的密钥。

debug1:用户 gitosis 服务 ssh 连接方法的 userauth-request 无 debug1:尝试 0 次失败 0 debug1: PAM: 为“gitosis”初始化 debug1:PAM:将 PAM_RHOST 设置为“firewall.domain.com” debug1:PAM:将 PAM_TTY 设置为“ssh” debug1: userauth-request 用户 gitosis 服务 ssh-connection 方法 publickey debug1:尝试 1 失败 1 debug1:测试 pkalg/pkblob 是否可以接受 debug1:temporary_use_uid:102/103(e=0/0) debug1:尝试公钥文件 /var/lib/gitosis/.ssh/authorized_keys 调试1:restore_uid:0/0 debug1:temporary_use_uid:102/103(e=0/0) debug1:尝试公钥文件 /var/lib/gitosis/.ssh/authorized_keys2 调试1:restore_uid:0/0 来自 FIRE.WALL.IP.ADDRESS 端口 52453 ssh2 的 gitosis 公钥失败

我仔细查看了 gitosis 服务器上的 authorized_keys 文件……它是不正确的。我仔细检查了我从工作站复制到 /tmp 的公钥文件,它是正确的,但与authorized_keys 中的不同。我删除了服务器上的 authorized_keys 文件并重新运行了“sudo -H -u gitosis gitosis-init < /tmp/id_rsa.gitosis.pub”。再次检查了authorized_keys文件......仍然是错误的。

我通过编辑authorized_keys 并添加正确的密钥来手动更新它,然后我通过隧道从我的工作站工作一两次尝试。然后它像以前一样停止工作。我回到了 gitosis 服务器上的 authorized_keys 文件,果然……gitosis 已将其恢复为不起作用的旧密钥。

为什么这样做....恢复到一个错误的公钥....即使在我尝试使用上述命令添加它之后...它未能更改它....然后手动更改它....这有效,但 git 然后又恢复到坏的状态。

就像 gitosis 一直记得我放在那里的第一个键......并且不会让我将其更改为更正的键。

令人沮丧...

马特

4

5 回答 5

4

跟进:

我不确定为什么 gitosis 坚持要重用一个坏的公钥。试图强迫它使用正确的密钥是行不通的。

所以今天我刚刚在我的 CentOS5 机器上删除并重新安装了 gitosis 包。

yum 去除 gitosis
rm -rf /var/lib/gitosis
百胜安装 gitosis
sudo -H -u gitosis gitosis-init < /tmp/id_rsa.gitosis.pub #  正确的密钥

在我的 Mac 上,我通过防火墙 SSH 隧道 localhost:22222 到 gitosis-server:22。

$ ssh -o ServerAliveInterval=3 -N -L 22222:gitosis-server:22 user@firewall.domain.com

在我的 Mac 上,我创建了 ~/.ssh/config,看起来像这样......

主机 gitosis-server
主机名本地主机
身份文件 ~/.ssh/id_rsa.gitosis
HostKeyAlias gitosis-server.domain.com
  端口 22222

然后...按照本网站上的说明...

http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way

......之后的一切...... “这里发生了一些很酷的魔法。在你的本地机器上运行它:” ......只是工作......除了记住用“gitosis”替换用户名“git”。

希望所有这些废话都对某人有所帮助。也感谢我在这里得到的建议......它有助于缩小问题范围。

马特

于 2009-08-14T22:15:39.893 回答
2

这是一个ssh问题,而不是(还)一个git问题。

ssh -v是您的朋友,因为它将为您提供有关ssh尝试使用的身份验证方法和密钥的调试信息。

十有八九我发现这是关键文件权限的问题。ssh喜欢您的.ssh目录和id_rsa文件只能由“用户”写入,而我的 umask 默认情况下允许组可写入文件。ssh -v会告诉你这是否是你的情况。

编辑

看起来 sshd 服务器不接受您的身份。我不知道您是否可以访问远程服务器,但sshd在调试模式下运行服务器可能会有所帮助。

运行类似这样的操作允许在给定端口上建立一个连接(这样它就不会中断正常sshd服务)并输出调试信息。这可能有助于调试服务器不喜欢您的身份的原因。

sshd -d -p 2022

如果您的“正常”sshd 服务使用额外参数运行,请确保也将这些参数提供给调试版本。

于 2009-08-12T07:27:09.420 回答
2

我针对类似情况的设置(工作)

我对repo.or.cz有类似的设置(由于某种原因,我使用的 ISP 阻止了空路由,波兰 ISP Telekomunikacja SA (tpnet)),它适用于我:

在尝试连接之前,我运行以下命令来设置 SSH 隧道:

$ autossh -M 20000 -f -N -L 2222:repo.or.cz:22 user@gateway.example.com

(如果我断开连接,我使用autossh而不是重新连接,即保持连接)。ssh检查是否将适当的身份添加到 SSH 身份验证代理:

$ ssh-add -l
2048 d7:d3:69:f5:0f:f9:5e:aa:e0:0b:28:c2:03:42:09:66 /home/user/.ssh/id_dsa_gateway.example.com (DSA)
1024 11:a2:29:fe:37:12:a7:33:c4:23:b0:e1:82:92:e0:6a /home/user/.ssh/id_dsa_repo.or.cz (DSA)

我使用钥匙串必须在登录时只为我的私人 SSH 密钥提供一次密码。

我的设置如下~/.ssh/config

主机 repo.or.cz
        # NoHostAuthenticationForLocalhost 是
        主机名本地主机
        端口 2222

此设置对我有用,没有问题。


调试你的情况

至于调试你的情况?

首先,我会检查我是否可以使用“ssh user@firewall.domain.com”登录到网关,以检查是否可以设置 SSH 隧道。如果您在 Linux 上,您可以使用例如netstat --tcp检查是否已建立到网关的连接;在其他操作系统和环境中,您可以找到类似的实用程序。

检查您是否可以正确连接到 gitosis。(如果我没记错的话, gitorious使用 gitosis 来管理通过 SSH 的访问,所以我在下面的示例中使用了来自 gitorious 的响应)

$ ssh gitosis@gitosis-server
需要 SSH_ORIGINAL_COMMAND
                             连接关闭。

如果它没有做与上面类似的事情(repo.or.cz 返回“致命:你认为我是什么?一个外壳?”,GitHub 会返回“你好用户!你已经成功认证,但 GitHub 不提供外壳访问。”),使用“ssh -v gitosis@gitosis-server”检查失败的地方:

$ ssh -v gitosis@gitosis-server
[...]
debug1:可以继续的身份验证:publickey
debug1:下一个认证方式:publickey
debug1:提供公钥:/home/user/.ssh/id_dsa_gitosis-server
debug1:远程:强制命令:gitosis-server 用户
[...]
debug1:认证成功(公钥)
于 2009-08-12T08:28:17.407 回答
1

你说你可以sshlocalhost:2222成功。要检查您是否已~/.ssh/config正确设置,您可以 ssh 到 justgitosis-server吗?

ssh gitosis-server
于 2009-08-12T07:25:12.107 回答
0

我有一个类似的问题,我用以下方法解决了它:

[srydberg@zeus ~]$ echo $SSH_AUTH_SOCK
/tmp/keyring-KXX3Aw/ssh
[srydberg@zeus tmp]$ sudo rm -rf keyring-KXX3Aw/

也许您的密钥被缓存在那里?

于 2010-11-24T22:29:42.580 回答