【问题标题】:Understanding ssh-keygen for SSH'ing into a server vs accessing GitHub了解 ssh-keygen 用于 SSH 进入服务器与访问 GitHub
【发布时间】:2015-07-09 13:55:00
【问题描述】:

所以我的理解是ssh-keygen 是 OpenSSH 提供的众多命令之一。

当使用ssh-keygen 生成私钥/公钥对时,我知道您可以将公钥放到远程服务器上(在~/.ssh/authorised_keys 内),这样您就可以通过 ssh 进入该服务器。

但似乎有两种不同的方式来生成密钥对,从某种意义上说,您可以单独使用 ssh-keygen,而当您 cat 使用公钥时,您会看到类似以下内容:

ssh-rsa XXXX User@ComputerName

User@ComputerName 对我来说看起来像 M@Marks-MBP.default

另一种方法是使用-C 评论标志(GitHub 建议这样做)。它似乎不会使用User@ComputerName,而是使用您的电子邮件地址代替它(或您碰巧使用的任何“评论”)。

我是否认为要通过 SSH 连接到服务器,您用于登录的用户名是您的公钥中设置的 -C 注释?

所以如果我根本不使用-C,那么它会在最后生成一个带有M@Marks-MBP.default 的公钥。然后我假设用户名是M

但如果我使用-C "bingbop",那么我假设SSH 的用户名是bingbop

对吗?

另外,GitHub 是否有任何技术原因建议使用 -C 指定您的电子邮件地址,而不是取消该标志?

我猜当您尝试克隆或推送到您的存储库(使用他们的git@github.com:<user>/<repo>.git 协议)时,它无法仅通过公钥识别您,它需要将评论设置为您的 GitHub 电子邮件地址

【问题讨论】:

    标签: git github ssh ssh-keygen


    【解决方案1】:

    评论仅供参考;它与 Git 已知的用户名无关。当您 ssh 进入 github 时,它会将公钥与您存储库中的私钥匹配,因此仅知道与哪个用户关联。

    【讨论】:

    • 那么,关于通过 SSH 连接到标准 Web 服务器(即将公钥添加到 authorized_keys 文件的位置),您如何知道使用 ssh 命令时要使用的用户名?还是没关系(例如,您可以使用任何用户名,它会忽略它并使用私钥/公钥对您进行身份验证)
    • GitHub 如何设置他们的身份验证与其他服务器如何设置他们的身份验证是正交的。在 GitHub 的情况下,您始终使用用户 ID git。对于其他服务器,您需要在连接时放置用户。您可以在客户端的.ssh/config 中设置单独的身份,以便客户端提供较小的身份集;但一般情况下ssh 的意思不是“任何用户”。
    • @Integralist 在使用公钥/私钥对进行 SSH 连接时,存在 no 用户名概念。仅密钥就是您进行身份验证的内容。 (您可以使用用户名和密码来代替 SSH,但这是一个完全独立的概念,可以用来代替密钥对)。就像 AlBlue 所说的那样,密钥末尾的注释不是用户名 - 它只是一个描述/注释,如果您愿意,可以使用它来帮助您知道这是谁的密钥。
    【解决方案2】:

    我是否认为要通过 SSH 连接到服务器,您用于登录的用户名是 -C 注释在您的公钥中设置的任何内容?

    没有。键的评论字段实际上就是:一个(可选)评论,按照惯例,通常设置为您的电子邮件地址,但如果未指定,则默认为user@host

    您通过 SSH 登录时使用的用户名与该评论字段无关或派生自该评论字段。

    另外,GitHub 是否有任何技术原因建议使用 -C 来指定您的电子邮件地址而不是取消该标志?

    是的,原因是默认的user@host 很少向您提供公钥的人提供有用的信息。另一方面,您的电子邮件地址是更有价值的信息。

    我猜当您尝试克隆或推送到您的存储库(使用他们的 git@github.com:/.git 协议)时,它无法仅通过公钥识别您,它需要注释设置为您的 GitHub 电子邮件地址。

    GitHub 可以仅通过提供的密钥来识别您,因为它在所有 GitHub 用户中都是唯一的。在您给出的 URI 语法中,@ 之前的 git 是提供给 SSH 的用户名。因此 GitHub 为其所有用户使用通用用户名git,并通过他们提供的密钥来识别个人用户。

    【讨论】:

    • 谢谢@sschuberth。出于兴趣,我正在阅读sshkeychain.sourceforge.net/mirrors/SSH-with-Keys-HOWTO/…,它似乎表明(尽管实际上没有提到;这只是我得到的印象)您在 ssh 命令中使用的用户名在某种程度上与 SSH 公钥中的user@host 相关联
    • 好的,我想我明白我在哪里弄糊涂了。阅读digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2 似乎表明您总是需要创建一个用户帐户,然后您的 ssh 密钥对只是阻止您输入该用户的密码
    • 是的,通常是这样:对于host 的服务器配置了user 帐户,您将使用user@host 登录。然而,对于拥有数万或数十万用户的大型站点,并不是每个用户都在服务器上真正拥有一个帐户,而是只有一个帐户(例如名为 git)在 SSH 身份验证方面为所有用户“共享” ,但用户仍然通过他们提供的密钥来识别。
    • 再次感谢@sschuberth。您的 cmets 非常有帮助
    猜你喜欢
    • 2012-07-29
    • 2021-12-20
    • 1970-01-01
    • 2011-12-01
    • 2021-03-09
    • 2017-03-28
    • 2011-04-21
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多