编辑
2024-09-23
linux
00
请注意,本文编写于 230 天前,最后修改于 230 天前,其中某些信息可能已经过时。

目录

1. 生成公钥和私钥
2. 分发公钥到远程服务器
3. 配置SSH客户端
4. SSH免密登录过程
总结

这是课上讲的内容,用ssh做验证免密登录的挺多的,github就是

SSH(Secure Shell)免密登录是一种通过公钥加密技术实现的安全登录方式,允许用户在不输入密码的情况下登录到远程服务器。其原理主要涉及公钥和私钥的生成、分发和验证过程。以下是SSH免密登录的详细原理:

1. 生成公钥和私钥

首先,用户需要在本地机器上生成一对公钥和私钥。这个过程通常使用ssh-keygen命令完成。

bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa:指定使用RSA算法生成密钥对。
  • -b 4096:指定密钥长度为4096位,增加安全性。
  • -C "your_email@example.com":添加注释,通常是用户的电子邮件地址。

执行上述命令后,系统会提示用户输入密钥的存储路径和密码(可选)。默认情况下,生成的密钥对会存储在~/.ssh/目录下:

  • ~/.ssh/id_rsa:私钥文件,必须保密。
  • ~/.ssh/id_rsa.pub:公钥文件,可以公开。

2. 分发公钥到远程服务器

接下来,用户需要将生成的公钥文件(id_rsa.pub)的内容复制到远程服务器的~/.ssh/authorized_keys文件中。这个过程可以通过多种方式完成,最常见的是使用ssh-copy-id命令。

bash
ssh-copy-id user@remote_host

执行上述命令后,系统会提示用户输入远程服务器的密码。ssh-copy-id会将本地公钥文件的内容追加到远程服务器的~/.ssh/authorized_keys文件中。

3. 配置SSH客户端

在本地机器上,用户需要确保SSH客户端配置正确。通常情况下,SSH客户端会自动使用~/.ssh/id_rsa作为私钥文件。如果需要指定其他私钥文件,可以在~/.ssh/config文件中进行配置。

bash
Host remote_host HostName remote_host User user IdentityFile ~/.ssh/id_rsa

4. SSH免密登录过程

当用户尝试通过SSH登录到远程服务器时,以下步骤会自动进行:

  1. 客户端发起连接请求:用户在本地机器上执行ssh user@remote_host命令,SSH客户端会向远程服务器发起连接请求。

  2. 服务器发送随机字符串:远程服务器接收到连接请求后,会生成一个随机字符串,并使用用户的公钥对其进行加密,然后将加密后的字符串发送给客户端。

  3. 客户端使用私钥解密:客户端接收到加密后的字符串后,使用本地存储的私钥对其进行解密,得到原始的随机字符串。

  4. 客户端发送解密后的字符串:客户端将解密后的随机字符串发送回远程服务器。

  5. 服务器验证:远程服务器接收到客户端发送的解密后的字符串后,会与之前生成的随机字符串进行比对。如果两者一致,说明客户端拥有与公钥对应的私钥,验证通过,允许用户登录。

总结

总结就是,通过非对称加密生成一对密钥,把公钥给需要连接的服务器,私钥在本地,本地像远程服务器发起登录请求,对方会检查是否有对应的公钥有的话随机生成一段数据加密发过去,完成握手

image.png

上面是具体流程,很清晰

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!