了解SSH到服务器的ssh-keygen与访问GitHub

时间:2015-07-09 13:55:01

标签: git github ssh ssh-keygen

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

使用ssh-keygen生成私钥/公钥对时,我知道您可以将公钥放到远程服务器上(~/.ssh/authorised_keys内)并且它允许您ssh到该服务器

但似乎有两种不同的生成密钥对的方法,因为你可以单独使用ssh-keygen,当你cat公钥时你会看到一些东西像:

ssh-rsa XXXX User@ComputerName

User@ComputerName对我而言M@Marks-MBP.default看起来像-C

另一种方法是使用User@ComputerName注释标记(GitHub建议这样做)。似乎它不会使用-C,而是使用您的电子邮件地址代替它(或者您恰好使用的任何'评论')。

我是否正确地认为,对于SSH进入服务器,用于登录的用户名是公钥中-C注释设置的用户名?

因此,如果我根本不使用M@Marks-MBP.default,那么它最终会生成一个M的公钥。然后我假设用户名是-C "bingbop"

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

这是对的吗?

此外,是否有任何技术原因GitHub建议使用git@github.com:<user>/<repo>.git来指定您的电子邮件地址,而不是将该标志关闭?

我猜测当您尝试克隆或推送到您的仓库(使用他们的NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error]; _currentVideoId = json[@"id"]; 协议)时,它无法仅通过公钥识别您,它需要将注释设置为您的GitHub电子邮件地址

2 个答案:

答案 0 :(得分:1)

该评论仅供参考;它与Git已知的用户名无关。当你ssh到github时,它会将公钥与你的存储库中的私钥相匹配,因此只知道与之关联的用户。

答案 1 :(得分:0)

  

我是否正确地认为,对于SSH进入服务器,用于登录的用户名是公钥中设置-C注释的用户名?

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

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

  

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

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

  

我猜测当你尝试克隆或推送你的repo(使用他们的git@github.com:/ .git协议),它无法单独通过公钥识别你,它需要评论设置为您的GitHub电子邮件地址。

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