我总是在 putty 中使用 ssh 来连接远程服务器。据我所知,ssh 是基于公钥/私钥机制的,是吗?
这是否意味着客户端在连接到服务器时会第一次收到公钥,然后使用公钥继续进行后续通信?
谢谢。
您是指身份验证还是加密?
对于身份验证,此处的第 5.5.1 节对其进行了介绍: http: //docstore.mik.ua/orelly/networking_2ndEd/ssh/ch05_05.htm#ch05-46136.html
通常,您创建密钥对并通过其他方式获取它们。
如果您的意思是加密,请在此处尝试第 3.9.1.3 节:http: //docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_09.htm#ch03-65213.html
公钥/私钥有两个部分发挥作用——会话初始化和(可选)用户身份验证。
在会话初始化中,主机公钥和私钥用于建立加密连接,但不用于加密连接本身。相反,初始设置用于安全地生成用于加密连接的唯一会话密钥。主机公钥/私钥在服务器上生成并安装。
连接时,您的 ssh 客户端(在本例中为 PuTTY)将验证主机密钥是否是您上次连接时记住的内容。(如果它们不同,那么可能有人在窥探您的连接!)这就是为什么 PuTTY 在您第一次连接时要求您确认主机密钥的散列 - 它没有记录密钥应该是什么是,所以它要求您进行验证。如果您告诉 PuTTY 确认并保存,那么 PuTTY 会将主机密钥的哈希值保存在注册表中以供将来连接。
在用户认证中,用户公钥和私钥用于允许访问服务器。为服务器上的用户安装公钥。然后,服务器可以使用该密钥向客户端发出质询,只有使用用户的私钥才能正确回答该质询。用户自己生成公钥/私钥(例如使用ssh-keygen)。
对于 PuTTY,您可以使用PuTTYgen实用程序(这相当于 ssh-keygen 的 PuTTY)生成自己的公钥和私钥。如何在服务器上安装公钥取决于您。然后,运行Pageant(一个位于通知区域的小应用程序)并添加您的私钥。如果您在私钥上设置了密码,那么 Pageant 会提示您输入它。Pageant 在运行时将与 PuTTY(或 pscp、psftp 等)一起使用您的私钥。
这是对所涉及过程的总体简化;有关详细信息的链接,请参见James的回答。