SSH + svnserve -t 命令,同时仍允许 shell 访问

SSH + svnserve -t 命令,同时仍允许 shell 访问

我在配置网站托管服务器时遇到了一些问题(例如。网站) 只有一个主用户帐户(例如所有者名称),以允许以下操作:

  • 用户朋友作为用户名出现在 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 更强大、更灵活。

相关内容