通过SSH隧道连接到gitosis服务器

时间:2009-08-12 04:51:39

标签: git ssh firewall gitosis tunnel

我的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 

It was successful as I can see the public key in /var/lib/gitosis/.ssh/authorized_keys.

Back on my macbook I setup a ~/.ssh/config file with the following...

Host gitosis-server
Hostname localhost
HostKeyAlias gitosis-server.domain.com
  Port 22222

So...I'm thinking this command should work...

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

It does not however as it comes up asking for a password....when the public keys should be working.

Initialized empty Git repository in /Users/USER/Development/gitrepo/gitosis-admin/.git/
gitosis@localhost's password: 

Any ideas on getting git working through to a gitosis server behind a firewall?

Thanks,
Matt


EDIT - Adding Debug From SSH Attempt

I did this command, 'ssh -vvv gitosis@gitosis-server'. I get some debugging back and it doesn't seem to like my Identity.

debug2: key: /Users/USER/.ssh/id_rsa.gitosis (0x1019b0)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/USER/.ssh/id_rsa.gitosis
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
gitosis@localhost's password: 

EDIT 2

OK...Definately a bad key. I double checked all my keys again and of course found the gitosis-server was holding a bad key in the authorized_keys file.

debug1: userauth-request for user gitosis service ssh-connection method none debug1: attempt 0 failures 0 debug1: PAM: initializing for "gitosis" debug1: PAM: setting PAM_RHOST to "firewall.domain.com" debug1: PAM: setting PAM_TTY to "ssh" debug1: userauth-request for user gitosis service ssh-connection method publickey debug1: attempt 1 failures 1 debug1: test whether pkalg/pkblob are acceptable debug1: temporarily_use_uid: 102/103 (e=0/0) debug1: trying public key file /var/lib/gitosis/.ssh/authorized_keys debug1: restore_uid: 0/0 debug1: temporarily_use_uid: 102/103 (e=0/0) debug1: trying public key file /var/lib/gitosis/.ssh/authorized_keys2 debug1: restore_uid: 0/0 Failed publickey for gitosis from FIRE.WALL.IP.ADDRESS port 52453 ssh2

我仔细查看了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一直记住我放在那里的第一把钥匙......并且不会让我把它改成纠正的钥匙。

...令人沮丧的

马特

5 个答案:

答案 0 :(得分:3)

<强>跟进:

我不确定为什么gitosis坚持重复使用糟糕的公钥。试图强制它采取正确的密钥不起作用。

所以今天我刚刚移除并重新安装了我的CentOS5盒子上的gitosis包。

yum remove gitosis
rm -rf /var/lib/gitosis
yum install gitosis
sudo -H -u gitosis gitosis-init < /tmp/id_rsa.gitosis.pub  #the correct key

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

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

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

Host gitosis-server
Hostname localhost
IdentityFile ~/.ssh/id_rsa.gitosis
HostKeyAlias gitosis-server.domain.com
  Port 22222

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

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

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

希望所有废话都能帮助别人。还要感谢我在这里提出的建议......这有助于缩小问题范围。

马特

答案 1 :(得分:2)

这是ssh问题,而不是({1}}问题。

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

十分之九的我发现这是关键文件权限的问题。 ssh喜欢您的ssh目录和您的.ssh文件只能由'user'编写,我的umask默认允许组可写文件。 id_rsa会告诉您情况是否属于这种情况。

修改

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

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

sshd

如果您的'普通'sshd服务使用额外参数运行,请确保将这些服务提供给调试版本。

答案 2 :(得分:2)

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

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

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

$ 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)

我使用keychain只能在登录时为我的私人SSH密钥提供密码。

我在~/.ssh/config中设置了以下内容:

Host repo.or.cz
        # NoHostAuthenticationForLocalhost yes
        HostName localhost
        Port 2222

此设置对我没有任何问题。


调试您的情况

至于调试你的情况?

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

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

$ ssh gitosis@gitosis-server
Need SSH_ORIGINAL_COMMAND
                             Connection to  closed.

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

$ ssh -v gitosis@gitosis-server
[...]
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_dsa_gitosis-server
debug1: Remote: Forced command: gitosis-server user
[...]
debug1: Authentication succeeded (publickey)

答案 3 :(得分:1)

你说你可以成功地到localhost:2222。要检查您是否正确设置了~/.ssh/config,是否可以直接使用gitosis-server

ssh gitosis-server

答案 4 :(得分:0)

我遇到了类似的问题,我解决了这个问题:

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

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