4

我正在努力解决这个问题,也许有人可以帮助我更好地理解这一点。我发现了一个几乎是我想做的问题,称为Accessing Subversion repository with 2 hops using svn+ssh protocol

这是我想做的事情:

我想在我的 Live 服务器上签出一个 svn 项目,但 svn 服务器无法在 Internet 上访问。所以我需要通过 ssh 隧道进入我的主网络服务器,然后进入 SVN 服务器,然后将文件签出到 Live 服务器

为了清楚起见,这里有一些虚构的设置:

  1. 实时服务器:(eth0)10.123.210.123
  2. 网络服务器:(eth0) 10.89.123.123 和 (eth1) 192.168.1.1
  3. SVN 服务器:(eth0) 192.168.1.8

所有服务器都使用端口 9222 上的密钥文件进行身份验证,并且服务器有一个具有有效密钥的用户管理员。所以管理员几乎可以从任何服务器登录到每台服务器,Live 无法从逻辑上直接访问 SVN。

因此,根据上述帖子中的@epsilon-prime,我应该在 Live 服务器上设置 /home/admin/.ssh/config

Host mysubversionserver
        HostName = 10.89.123.123
        ProxyCommand = ssh 192.168.1.1 /usr/local/bin/nc -w 10 192.168.1.8 %p
        ForwardX11 = no
        User = admin
        ForwardAgent = yes

除了我无法连接到这个设置之外,我真的不明白这将如何帮助我进入颠覆服务器。一旦使用这个 ssh,我就在 subversion 服务器上,但我需要在带有这个隧道的 Live 服务器上......或者我只是错过了一些非常明显的东西?

4

2 回答 2

3

因此,经过大量阅读和更多阅读,我终于找到了对我的问题的一些解释,并意识到这个配置不起作用,而是@Rup 是正确的,即使他的语法有点错误。

无论如何要结束这个问题并为其他搜索灵魂提供一些有用的信息,这是使用 linux 中的配置文件制作隧道的正确方法

Host FireWallServer
        HostName <FireWall Server IP>
        User admin
        IdentityFile ~/.ssh/id_rsa
        PasswordAuthentication no
        Compression yes
        ForwardX11 no

Host SVNServer
        ProxyCommand ssh FireWallServer nc <SVN Server IP> %p
        ForwardAgent yes

您的第一个朋友将是man ssh_config,因为它包含您需要的大部分信息。我在透明多跳 SSH上找到了一个很好的解释 所以最后的最佳解决方案是做一个本地端口转发隧道:

ssh -L 9223:<SVN Server IP>:80 admin@<FireWall Server IP>

现在打开另一个终端并在此隧道上进行 svn 查询:

svn info http://localhost:9223/<path to your svn repo>

然而,这种工作方式需要一些必备条件:

  1. 必须将所有服务器配置为在端口 9222 上接受 ssh 供用户 admin 使用 ssh_key
  2. 所有服务器都必须配置 ssh 守护程序以使用相同的端口
  3. SVN 必须配置为使用 mod_dav 在 apache 上运行

希望它对某人有用:)

于 2011-11-22T16:22:10.120 回答
0

要使SVN 通过代理服务器工作,您可能需要在 Live 服务器上的 subversion 配置文件中进行特殊设置,例如~/.subversion/servers

[global]
http-proxy-host=10.89.123.123
http-proxy-port=9222

在您的情况下,代理服务器可能是您用来连接实时系统的网络服务器(如有疑问,请咨询您的网络管理员)。如果您想在代理服务器后面使用 wget等其他命令访问互联网,设置环境变量很有用http_proxy

于 2011-11-21T14:36:06.373 回答