我不知道为什么ssh-keygen生成的SSH公钥文件的末尾有用户和主机。

示例:id_rsa.pub

ssh-rsa ... rest of file ... /CA9gyE8HRhNMG6ZDwyhPBbDfX root@mydomain


请注意文件末尾的root@mydomain

如果我可以在任何地方与任何用户一起使用公钥来使用我的私钥进行身份验证,那么root @ mydomain有何意义?

还是只是占位符才能弄清楚我们的身份由谁签发?

评论

我见过一些要求注释字段包含@符号的过分热心的Web表单,但这没有任何技术原因。

#1 楼

该字段是注释,可以随意更改或忽略。默认情况下,它由user@host设置为ssh-keygen

OpenSSH sshd(8)手册页描述了公共密钥的格式,因此:


公共密钥包括以下内容以空格分隔的字段:选项,键类型,base64编码的键,注释。 。 。 。注释字段什么都没有使用(但是可能方便用户识别密钥)。


ssh-keygen(1)手册页说: />键注释可能有助于识别键。创建密钥时,注释将初始化为“ user @ host”,但可以使用-c选项进行更改。


评论


简明扼要。能够更改评论将为我解决难题。我认为它在ssh身份验证过程中具有某种作用。

–罗勒A
2015年12月17日在9:23

@BasilA我有一些密钥已将其完全删除。

–迈克尔·汉普顿
2015年12月17日15:11

在Google Cloud Compute上将SSH密钥登录设置为实例时,GCC使用此注释字段来标识与密钥相关联的实例上的用户名。

– hBy2Py
2015年12月18日14:23在

#2 楼

sshd(8)的手册页中有关授权密钥的部分中对此进行了简要说明:


协议2公钥包括:选项,密钥类型,base64编码的密钥,comment


在授权密钥的openssh上下文中,仅存在注释的含义。但是有SSH实现,这赋予了这一部分的含义,例如,LANCOM调制解调器中的SSH实现正在使用此注释作为对其有效的用户名。

评论


+1引用此人

– mgarciaisaia
2015年12月17日下午4:45

#3 楼

正如其他人指出的那样,它是一条注释,可让您确定哪个密钥是哪个密钥。

例如在id_rsa.pub中查看单个键时,它并没有太大的区别,但是当您查看一个可能很长的键列表(例如authorized_keys文件中的键列表),能够轻松识别哪个键非常有用。

ssh-keygen的默认值为user@hostname,其中对于典型的用例,是一个明确的标识符,它是哪个键(user@domain不会)。

#4 楼

非常非常简单:我和您都是使用机器的人。因此,在这个示例中,您发布了:

ssh-rsa [piles of gobbledygook]…CA9gyE8HRhNMG6ZDwyhPBbDfX root@mydomain


机器可以读取以下内容:

ssh-rsa [piles of gobbledygook]…CA9gyE8HRhNMG6ZDwyhPBbDfX


人类可以阅读以下注释:

root@mydomain


人们往往会忘记,即使在计算机系统上看起来很复杂,但如果仅设计代码,则实际上可能要复杂得多。机器消耗。我的意思是看模糊的恶意软件代码。将其解码并格式化后,便可以被人工读取。但是,必须有人竭尽全力使人类难以阅读。

默认情况下,计算机系统上的所有类型的编码和配置文件都是供人类使用的结构,因为……我们是人类在使用机器和机器不需要这样的东西:


注释。以人类可读的语言编写的变量和函数。

所以此评论只针对您我和其他人。如果没有评论,它很可能会工作。但是有一次,在凌晨3:00某处无法正常工作,而您正在寻找正确的公钥,那么您将希望/梦想/祈祷那里的评论。

评论


“机器不需要...缩进”咳嗽Python咳嗽

–用户
15年12月18日在8:54

@MichaelKjörling“ ...除非让他们关心它们。” :-)

– hBy2Py
15年12月18日在14:20