ssh-keygen 与不同的用户进行颠覆
Posted
技术标签:
【中文标题】ssh-keygen 与不同的用户进行颠覆【英文标题】:ssh-keygen with different user for subversion 【发布时间】:2010-10-10 12:37:13 【问题描述】:我不知道如何在我的服务器上为其他用户创建公钥/私钥。在我的服务器上,我通过 shell 键入以下内容
(uiserver):john:> ssh-keygen -t dsa
之后,我输入文件名和密码,成功生成了“john”的私钥和公钥对。现在,当我使用此密钥 ssh 进入我的 subversion 存储库(坐在 john 上)时,所有操作都记录为“john”。太完美了。
接下来,我想为“george”创建一个公钥/私钥对,以便他可以访问我的服务器。我从我的服务器重复了 ssh-keygen。然后我把私钥给了乔治。 George 成功安装了密钥,但每次他在 svn 存储库中执行操作时,subversion 都会将他的操作记录为“john”而不是“george”。如何让 subversion 识别“george”和“john”之间的区别?
我查看了authorized_keys2,发现两个键的最终注释都是“john@uiserver”。我尝试编辑评论,但 subversion 仍然无法识别 george 和 john 之间的区别。
其他细节
根据 Juliano 的回答,我有一个半有效的解决方案。我去了“大卫”机器(linux),制作了prv/pub键,将pub键附加到john的authorized_keys2上。完美的! SVN 将 david 的更改记录为 david。
我去了“george”机器(windows xp),使用puttygen创建prv/pub密钥,将pub密钥附加到john的authorized_keys2。 George 可以访问 svn,但他的所有更改仍然记录为 john。一旦我弄清楚在 TortoiseSVN 中的何处配置它,我就会尝试 bojo 的隧道解决方案。
回答
我使用了 bojo 答案的选项 2。最后,我需要做的就是将以下行添加到我的 authorized_keys2
command="svnserve -t --tunnel-user=george",no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-dss <george's long public key> == meaningful comment
我也加了一行
george=george's password
到我的 /pathtorepository/conf/passwd 到我的颠覆密码文件
【问题讨论】:
John,您需要以“john”身份登录 linux 机器并添加我所指的说明(添加 George 帐户作为超级用户,或者在 John 帐户下执行命令技巧) .您根本不需要配置 TortoiseSVN。 【参考方案1】:然后我把私钥给了乔治。
私钥被称为私有是有原因的。他们绝不打算以这种方式转移。 George 应该在自己的用户环境中创建自己的密钥对。但这与您遇到的问题无关。键只是一个非常大的数字的主要因素(为了便于理解而过度简化)。用户身份不是密钥的一部分,而是附加在密钥上的“标签”,SSH 并没有太多用处。
根据您的描述,您要求 George 通过 SSH 登录到 John 的帐户。决定登录 SVN 操作的用户的因素与用于身份验证的密钥对没有任何关系,而是与真正登录的用户有关。
因此,George 必须拥有自己的帐户登录 SVN 服务器,存储库必须由两个帐户共享,并且 George 必须使用他自己的凭据登录服务器。
约翰的网址:svn+ssh://john@svn-server/path/to/repo
乔治的网址:svn+ssh://george@svn-server/path/to/repo
【讨论】:
密钥肯定是由 George 创建的。但是,在这种情况下,他随后将他的公钥提供给 John,John 将密钥附加到他的 .ssh/authorized_keys 文件中,然后按照我链接的答案中的说明进行操作。不需要单独的帐户。 如果您使用存储库的专用用户帐户,可以。但根据描述,是一个私人账号,名叫“john”。因此,该解决方案有效地使 George 登录到 John 的私人帐户。不好。 是的,描述确实说这是一个名为“john”的私人帐户,因此我的推理是因为它看起来像是他想使用单个帐户。他可以轻松地将 George 的 shell 限制为仅使用 svnserve,而实际上无法获得对 john 帐户的 shell 访问权限。 感谢 bojo 和 juliano...我得到了这一半的工作。我在这个问题的描述中添加了更多细节。仍然不确定私人帐户是什么意思?谢谢你的耐心,我还在学习这些东西【参考方案2】:在svn manual 处查看有关如何使用 --tunnel-user 命令的说明。我想 George 显示为 John 的原因是因为您没有告诉 ssh 会话它是哪个用户,所以它默认使用 John 的帐户。
为了澄清,原始海报有两个选择。
-
为 George 创建一个新用户帐户。这假定他具有超级用户访问权限。
生成第二个密钥(最好是 George 这样做),附加到 John 帐户的 .ssh/authorized_keys 文件,并将上述链接的命令添加到 .ssh/authorized_users 文件中,如所述。该链接还介绍了如何限制其他用户对 John 帐户的访问。
【讨论】:
感谢 bojo,我做了选项 2,一切正常。我按照你和 juliano 的建议做了,就是在 George 的机器上生成 prv 和 pub 密钥。 很好的澄清(比我的回答更好;))。 +1【参考方案3】:这是否与此SO question 相关,指向博客条目svn over ssh prompts for the wrong username?
解决方案是在 george .ssh 目录中创建一个配置文件并将以下内容放入:
Host uiserver
User george
【讨论】:
【参考方案4】:您可以尝试使用:
ssh-keygen -C "george"
【讨论】:
以上是关于ssh-keygen 与不同的用户进行颠覆的主要内容,如果未能解决你的问题,请参考以下文章
ssh-keygen 和 openssl 给出了两个不同的公钥
ssh-keygen - 如何使用特定用户名设置 rsa 密钥
使用 ssh-keygen 和 ssh-copy-id 实现SSH无密码登录功能