这真是令人头痛。从哪里开始呢?到目前为止,我已经遵循这文章,以及其跟进教程和我尝试做时的输出
svn+engine_ssh://[insert-elastic-ip-here]/var/svn/test
我得到以下输出:
Permission denied (publickey).
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
我的配置文件在隧道部分(在 ec2 服务器上)如下所示:
[隧道]
engine_ssh = /usr/bin/ssh -l username
我在本地机器的隧道中具有相同的列表,仅使用我的本地用户名而不是我的远程用户名。
我猜问题是我需要生成一个 ssh 密钥并以某种方式在我的服务器上设置它?问题是 ec2 使用的文件被称为hosts.pem
我IdentityFile
的 ssh 配置文件。
那么,我在这里做错了什么?我该怎么办?除了为我的服务器使用 SSH + svn 之外,还有其他选择吗?
如果有人需要更多信息我很乐意发布。
答案1
是的,你需要让你的服务器以某种方式允许通过 SSH 登录 - 无论是通过允许 sshd_config 中的密码登录还是使用密钥登录 - 请参阅这个问题了解有关密钥登录工作的一些详细信息。
您的结帐流程有点过于复杂;您的用户名规范可以包含在结帐 URL 中,无需隧道配置。这样就可以正常工作:
svn+ssh://remoteusername@[insert-elastic-ip-here]/var/svn/test
除了使用 SSH + svn 之外,还有其他方法吗?
是的,绝对如此。你的问题标题提到了svnserve
,但这并不准确,因为你没有使用它——这是方法 1,而且非常基础。你不想在互联网上使用它,因为没有加密——数据或凭证。
方法 2 是您目前正在使用的 SSH 方法。
方法 3 是使用 WebDAV 为存储库提供服务的 Web 服务器;典型的首选选项是 Apache 和mod_dav_svn
模块。如果您不喜欢 SSH 选项,您绝对可以看看它;它更灵活一些。
答案2
从您看到的错误来看,我猜测您没有将您的个人 ssh 密钥放到远程机器上。
解决您的问题的一个快速方法可能是将本地的 id_rsa.pub 添加到服务器的授权密钥文件中。
第一的:cat ~/.ssh/id_rsa.pub
第二步:复制完整的字符串,然后编辑/home/USERNAME/.ssh/authorized_keys
并粘贴 id_rsa.pub 字符串。
如果您还没有个人 ssh 密钥,只需运行ssh-keygen
。
或者,如果您不想这样做,您可以通过指定 SVN_SSH 环境变量来使用 EC2 机器的 ssh 密钥。
export SVN_SSH="ssh -i path_to_your/key/goes/here"