作为使用 SSH 和 rsync 与密钥对解决各种问题的背景,我希望直接概述 SSH 身份验证期间发生的事件序列,以及各个客户端和主机文件如何发挥作用。
Google 发现很多解释都比较详细,要么范围太窄,要么范围太广,但充斥着这些细节。更不用说很多不正确或混乱的解释和论坛帖子了。
我最终创建了几个图表来澄清两件事:
- 准备使用密钥进行 SSH 通信需要哪些文件和操作
- 这些文件在建立连接过程中起什么作用。
我将在下面的答案中发布这些内容。
答案1
以下答案解释了使用公钥-私钥对(“公钥基础设施”或“PKI”)准备 ssh 身份验证所需的文件,以及在实际 ssh 会话期间如何使用这些文件。这里的一些细节使用适用于 Linux 的名称和目录,但这些原则适用于所有使用与之并行的程序和文件的平台。主要感兴趣的功能是:
- 用户机器
- 用户密钥对:公共和私有,客户端用户必须使用 ssh-keygen 创建,创建具有如下名称的文件:
- 〜/.ssh /id_rsa (私人)和
- 〜/.ssh /id_rsa.pub (民众)
- 在准备过程中,必须提供给主人授权密钥文件
- 〜/.ssh /已知主机
- 如果用户在首次登录时接受,它将从服务器接收公钥。
- 用户密钥对:公共和私有,客户端用户必须使用 ssh-keygen 创建,创建具有如下名称的文件:
- 主机(服务器)
- 主机密钥对:公立和私立
- 在某些时候会自动创建,例如在服务器上安装 openssh。典型名称:
- /etc/ssh/ssh_主机名_rsa_key (私人的)
- /etc/ssh/ssh_主机_rsa_密钥.pub (民众)
- 客户端用户首次尝试使用 ssh 连接时,主机会向客户端用户提供公钥。客户端会将主机的密钥存储在已知主机
- 〜/.ssh /授权密钥
- 在准备过程中,必须提供每个将要登录的用户的公钥。
- 主机密钥对:公立和私立
- 事件顺序在实际的 SSH(或 rsync)会话中,显示文件的参与方式。
(请注意,有两种不同的常见签名算法,RSA 和 DSA,因此在本讨论中使用“rsa”的地方,可能会出现字符串“dsa”。)
我希望这些图表能够有所帮助。