SSH认证过程
SSH(Secure Shell)认证是一种安全协议,主要用于在客户端与服务器之间建立加密通信通道,确保数据的安全传输。其认证机制包括密码认证和密钥对认证。
SSH 密钥对认证过程(自己生成密钥对)
基于 非对称加密 的密钥对认证流程如下:
- 生成密钥对:(通过
ssh-keygen等工具)- 一对密钥包含 公钥 和 私钥。
- 公钥:公开,用于加密或验证身份。
- 私钥:保密,用于解密或生成签名。
- 一对密钥包含 公钥 和 私钥。
- 服务器存储公钥:
- 公钥被放置在目标服务器的
~/.ssh/authorized_keys文件中。
- 公钥被放置在目标服务器的
- 客户端发起连接:
- 客户端通过 SSH 工具向服务器发起连接,提供用户名。
- 服务器发送加密挑战:
- 服务器生成一个随机数(挑战信息),用客户端的公钥加密后发送。
- 客户端解密并响应:
- 客户端使用本地保存的私钥解密随机数,并返回解密结果。
- 服务器验证响应:
- 服务器验证解密后的结果是否匹配原始随机数,确认客户端拥有对应私钥。
- 认证通过,建立连接。
目标服务器生成密钥认证过程
以下是oracle密钥对认证的基本过程:
- 生成密钥对: Oracle 云平台为你生成了一对公钥和私钥,并将公钥自动配置在目标服务器上。
- 客户端发起连接: 客户端(你)使用私钥发起 SSH 连接到 Oracle 云服务器。
- 服务器验证身份:
- 服务器检查你的公钥是否已经存储在它的
~/.ssh/authorized_keys文件中。 - 如果找到匹配的公钥,服务器会生成一个随机数(挑战信息),用它的私钥对该信息加密后发送给客户端。
- 服务器检查你的公钥是否已经存储在它的
- 客户端响应验证:
- 客户端使用本地保存的私钥解密服务器的随机信息,并将解密结果发送回服务器。
- 如果解密结果正确,说明客户端拥有私钥,服务器便授予访问权限。
自己生成密钥对与目标服务器生成密钥对的区别
| 特性 | 自己生成密钥对 | 目标服务器生成密钥对 |
|---|---|---|
| 密钥生成地点 | 在客户端本地生成(通过 ssh-keygen 等工具)。 | 在目标服务器生成,并由服务器提供私钥给用户。 |
| 公钥存储位置 | 手动上传到服务器的 ~/.ssh/authorized_keys 文件中。 | 服务器直接将生成的公钥存储到 ~/.ssh/authorized_keys 中。 |
| 私钥存储位置 | 本地客户端保管,绝不与他人分享。 | 服务器生成后提供给用户,由用户下载并妥善保管。 |
| 安全性 | 私钥从未离开本地设备,更加安全。 | 私钥生成后需通过网络传输到用户设备,有泄露风险。 |
| 配置复杂度 | 需要手动上传公钥到目标服务器,步骤稍复杂。 | 服务器预配置好公钥,用户只需下载私钥即可使用。 |
| 适用场景 | 适用于大多数用户和系统管理员,需要更多控制权。 | 适用于云服务商(如 Oracle),方便用户快速访问。 |
两种方式的认证流程对比
1. 自己生成密钥对
- 流程:
- 客户端运行
ssh-keygen生成密钥对。 - 将公钥(如
id_rsa.pub)上传到服务器的~/.ssh/authorized_keys。 - 服务器通过公钥验证客户端。
- 客户端运行
- 优点:
- 私钥从未离开本地,安全性更高。
- 客户端完全掌控密钥生成和管理。
2. 目标服务器生成密钥对
- 流程:
- 服务器生成密钥对,并将公钥自动配置到
~/.ssh/authorized_keys。 - 服务器将私钥(如
oracle-key.pem)提供给用户。 - 客户端使用私钥进行连接。
- 服务器生成密钥对,并将公钥自动配置到
- 优点:
- 简化配置,适合云服务的快速部署。
- 用户无需手动上传公钥到服务器。
选择哪种方式?
| 需求 | 推荐方式 |
|---|---|
| 安全性最高 | 自己生成密钥对,本地私钥永不外传。 |
| 快速使用云服务 | 使用目标服务器生成密钥对。 |
| 管理多个客户端或用户 | 自己生成密钥对,方便密钥分发和权限管理。 |
总结
- 自己生成密钥对:
- 私钥永远不离开本地,安全性更高。
- 手动上传公钥到服务器后,可完成认证。
- 目标服务器生成密钥对:
- 简化云服务器初次配置,快速使用。
- 私钥由服务器生成后传给用户,存在私钥泄露的潜在风险。
如果需要更高的安全性和灵活性,推荐使用自己生成密钥对的方式。









