我的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-initIt 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 22222So...I'm thinking this command should work...
$ git clone gitosis@gitosis-server:gitosis-admin.gitIt 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一直记住我放在那里的第一把钥匙......并且不会让我把它改成纠正的钥匙。
...令人沮丧的
马特
答案 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/
也许你的密钥被缓存在那里了?