我正在运行 Ubuntu 12.04.2 LTS 作为虚拟机,前端还有 vShield,启用了防火墙并进行了一些 NAT 修改。我的 VPS 配置中还有其他机器,但目前这并不重要。重要的是,我将 Ubuntu 上的 SSH 端口从 22 更改为 765,并在 vShield 上将端口从 424 转换为 765。防火墙具有 SSH(和 SVN)所需的所有权限。
所以我像这样建立 SSH 连接
kopparberg:Webpage marek$ ssh marko@91.***.***.69 -p 424
而且效果非常好。
问题出在哪里?我正在尝试按照本指南在 Ubuntu 上设置 SVN 服务器http://odyniec.net/articles/ubuntu-subversion-server/。
如果通过 SVN 协议签出我的存储库“网页”
kopparberg:Webpage marek$ svn checkout svn://91.***.***.69/Webpage --username svnuser
它正常工作。
我真正想做的是结账svn+ssh协议。我尝试了很多不同的方法,但都没有成功。
kopparberg:Webpage marek$ svn checkout svn+ssh://91.***.***.69:424/usr/local/svn/repos/Webpage --username svnuser
svn: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
svn: Network connection closed unexpectedly
再一次尝试...
kopparberg:Webpage marek$ svn checkout svn+ssh://91.***.***.69/usr/local/svn/repos/Webpage -p 424 --username svnuser
svn: invalid option character: p
Type 'svn help' for usage.
我也添加ssh = ssh -p 424
到/user/marek/.subversion/config
文件中。
kopparberg:Webpage marek$ svn checkout svn+ssh://91.***.***.69/usr/local/svn/repos/Webpage --username svnuser
marek@91.***.***.69's password
Permission denied, please try again.:
我的密码全都对了。
是否可以使用svn+ssh无需修改配置文件就可以通过自定义端口使用协议吗?
编辑:我发现我应该使用 SSH 用户,而不是 SVN 用户。但我使用的方式完全错误。--username
我应该将用户名放在 IP 地址前面,而不是子命令。
kopparberg:Webpage marek$ svn checkout svn+ssh://marko@91.***.***.69/usr/local/svn/repos/Webpage
这看起来好多了,而且很管用!我仍在寻找一种解决方案,让我在结账前无需编辑配置文件。换句话说,我想动态更改 SSH 端口。
答案1
我想我来晚了一点,但我遇到了完全相同的问题,并解决了它。
首先,确定新的默认 SSH 端口。这将影响整个 SSH(即:当您想要使用命令行、putty 等通过 SSH 连接到服务器时。不能仅针对 SVN 更改端口,除非您想要调用多个 SSHD 服务器实例,这超出了原始问题的范围)。
因此,假设如下:
- 我们希望所有操作都通过端口 123456 完成
- 您的服务器的 IP 地址是 192.168.1.100
- 您的路由器/防火墙已开放端口 123456
- 您的路由器/防火墙已设置端口转发,将外部端口 123456 路由到主机 192.168.1.100 的内部端口 123456
客户端:
无论如何,首先,在客户端机器上修改 <~/.subversion/config>,并在标题为 的行下[tunnels]
输入以下行:
ssh = ssh -p 123456
服务器端:
首先,您需要设置新的默认 SSH 端口。在您的 SVN 服务器上,编辑(在 Ubuntu 的情况下)您的 SVN SERVER 配置文件(注意“SSH”后面的“d”):sudo vi /etc/ssh/sshd_config
查找以“Port”开头的行(默认情况下为“Port 22”),然后将“22”更改为“123456”。保存并关闭文件。现在重新启动 SSHD 服务器:sudo restart ssh
假设您的 SVN 设置工作方式与上面所述类似,则一切就绪。如果您坚持转换端口,而不是将其作为单端口转发直通规则保持不变,只需在 中更改服务器端使用的 SSH 端口,即可完成设置。我已通过以下方式从 LAN 外的客户端成功测试了上述设置:
svn --username megaman ls svn+ssh://[email protected]/usr/local/svn/repos/private
希望这可以帮助!