known_hosts实际上是什么?

时间:2015-10-20 17:47:13

标签: ssh

在我运行

之前,我没有.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及其工作原理的信息。例如,在这种情况下,我没有在本地计算机上设置私钥,因此提示输入密码。

研究

根据

,它假设是服务器的公钥

https://security.stackexchange.com/questions/20706/what-is-the-difference-between-authorized-key-and-known-host-file-for-ssh

2 个答案:

答案 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。任何可选的评论数据。

另外!! 这个帖子可能对你有用:

https://security.stackexchange.com/a/20710

答案 1 :(得分:4)

要添加上面的答案和您的评论, ssh会话有四个构建块

  1. 加密(每个会话密钥呼出后派生的对称密钥)
  2. 数据完整性(MAC使用例如SHA,HMAC)
  3. 密钥交换方法
  4. 公钥方法或主机密钥方法
  5. SSH算法协商涉及密钥交换状态机 当SSH_MSG_KEXINIT消息与算法列表一起发送时开始。

    密钥交换方法或简单地kex指定用于加密的会话密钥和发送到客户端的主机身份验证主机公钥(ssh-rsassh-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消息      开始。

         
        
    1. C生成随机数x(1

    2.   
    3. S生成随机数y(0

    4.   
    5. 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上的签名。

    6.   

    某些系统中步骤3中提到的本地数据库可能是.ssh / known_hosts文件。 因此,为了回答您的问题,主密钥在密钥交换期间由主机发送给客户端。

      

    目前定义了以下公钥和/或证书格式:

         

    ssh-dss必需的标志Raw DSS Key

         

    ssh-rsa推荐标志Raw RSA Key

         

    pgp-sign-rsa可选标志OpenPGP证书(RSA密钥)

         

    pgp-sign-dss可选标志OpenPGP证书(DSS密钥)