我在配置网站托管服务器时遇到了一些问题(例如。网站) 只有一个主用户帐户(例如所有者名称),以允许以下操作:
- 用户我和朋友作为用户名出现在 svn 日志条目中,并且
- 用户我和朋友通过 SSH 访问 shell
因此,我在本地机器上设置了我的私钥/公钥对(笔记本电脑)并将公钥复制到网站的 /home/ownername/.ssh/authorized_keys 文件。我将此命令参数添加到以下行:
command="svnserve -t --tunnel-user=me -r /home/ownername/" ssh-rsa A...eQ== laptoplogin@laptop
其中 /home/ownername/svn/ 是 Subversion 存储库的位置。这允许我使用:
[laptop]$ svn co svn+ssh://[email protected]/svn/ project
并且我使用 Subversion 对项目所做的任何更改我在变更评论中列为用户,这很好。
但是,当我通过 ssh 登录时:
[laptop]$ ssh [email protected]
( success ( 1 2 ( ANONYMOUS ) ...
Connection closed.
[laptop]$
那么,我尝试做的事情是否可行?老实说,我对 ssh 隧道了解不够多,不知道该怎么做。有许多网站讨论限制或删除shell 访问 svn 客户端,但当然,除了自定义用户名之外,我还希望有 shell 访问权限我和朋友。
任何帮助都将不胜感激!
解决方案:
我只是设置了两个不同的 id_rsa 密钥:id_rsa_shell 和 id_rsa_svn。我将它们附加到服务器的 .ssh/authorized_keys 文件中。然后,对于“shell”密钥,我没有输入任何命令,而对于“svn”密钥,我输入了带有参数的 svnserve。然后,在笔记本电脑上,我将 .ssh/config 文件设置为包含两个条目:website-shell 和 website-svn,每个条目都设置了 IdentityFile 以指向相应的密钥。ssh website-shell 工作正常。对于 svn 命令,在 .subversion/config 中的 [tunnels] 下,我输入了:
website = ssh -p XXXX -i /home/emptyset/.ssh/id_rsa_svn
现在,我的结帐工作正常了:
$ svn co svn+website://website-svn/svn checkoutdirectory
测试提交验证了 svnserve --tunnel-user 参数是否能将我的别名放入 svn 提交中。请注意,它尊重 .ssh/config 中定义的 website-svn 别名。
甜的。 :)
答案1
我昨天想对此发表评论,但后来放弃了,等待对此特定设置更了解的人。根据您所说的,您可以通过为同一帐户设置多个用户,每个用户使用单独的密钥设置不同的命令结构。例如,用户 Bob 将拥有一个密钥 command="svnserve -t --tunnel-user=Bob -r /home/ownername/" ssh-rsa A...eQ== laptoplogin@laptop
而 Jane 将是命令“svnserve -t --tunnel-user=Jane -r /home/ownername/” ssh-rsa someother..eQ== laptoplogin@laptop
现在,按照同样的逻辑,您可以在您之间设置第三个共享密钥,该密钥仅执行 bash,或者共享帐户密码以在没有无密钥 ssh 的情况下登录并访问 shell。
话虽如此,顺便说一句,您可能只想看看 Mercurial 或 Git,它们都使在存储库上集中托管的开发变得非常简单,并且比 svn 更强大、更灵活。