在我运行
之前,我没有.ssh
目录
ssh user@foo.com
这创建了一个带有一个文件known_hosts
的.ssh目录。
它有一些这样的文字。
foo.com,107.180.00.00 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff
我认为这可能是我的服务器上的公钥或私钥的一些方法,但事实并非如此。
这是什么,它用于什么?
我只是想了解更多有关ssh及其工作原理的信息。例如,在这种情况下,我没有在本地计算机上设置私钥,因此提示输入密码。
研究
根据
,它假设是服务器的公钥答案 0 :(得分:12)
此文件实际上是您的个人证书颁发机构。它是您确定的所有SSH服务器主机公钥的列表是准确的。 known_hosts中的每个条目都是一个包含三个或更多空格分隔字段的大行,如下所示:
一个。一个或多个服务器名称或IP地址,以逗号连接在一起。
foo.com,107.180.00.00
湾密钥的类型。
ssh-rsa
℃。公钥数据本身编码为保持在ASCII范围内。
AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff
d。任何可选的评论数据。
另外!! 这个帖子可能对你有用:
答案 1 :(得分:4)
要添加上面的答案和您的评论, ssh会话有四个构建块
密钥交换方法或简单地kex指定用于加密的会话密钥和发送到客户端的主机身份验证主机公钥(ssh-rsa
,ssh-dss
..)。以下步骤是使用Diffie hellman密钥交换算法进行kex的基本步骤
引用RFC https://tools.ietf.org/html/rfc4253
以下步骤用于交换密钥。在这,C是 客户; S是服务器; p是一个大的安全素数; g是一个发电机 对于GF(p)的子组; q是子组的顺序; V_S是S&#39 识别字符串; V_C是C的识别字符串; K_S是S&#39 公共主机密钥; I_C是C&S的SSH_MSG_KEXINIT消息,I_S是S' s 在此部分之前已交换的SSH_MSG_KEXINIT消息 开始。
C生成随机数x(1
S生成随机数y(0
- 醇>
C验证K_S确实是S的主机密钥(例如,使用 证书或本地数据库)。 C也被允许接受 没有验证的密钥;但是,这样做会使 协议对主动攻击不安全(但可能需要 在许多环境中短期内的实际原因)。 C然后 计算K = f ^ x mod p,H = hash(V_C || V_S || I_C || I_S || K_S || e || f || K),并验证H上的签名。
某些系统中步骤3中提到的本地数据库可能是.ssh / known_hosts文件。 因此,为了回答您的问题,主密钥在密钥交换期间由主机发送给客户端。
目前定义了以下公钥和/或证书格式:
ssh-dss必需的标志Raw DSS Key
ssh-rsa推荐标志Raw RSA Key
pgp-sign-rsa可选标志OpenPGP证书(RSA密钥)
pgp-sign-dss可选标志OpenPGP证书(DSS密钥)