ssh免密登陆原理
1. 概述
SSH 免密登录是一种通过非对称加密技术实现的安全登录方式,允许用户在不输入密码的情况下登录到远程服务器。其原理主要涉及公钥和私钥的生成、分发和验证过程。
2. 对称加密和非对称加密
2.1 对称加密
对称加密使用相同的密钥进行数据的加密和解密。在SSH免密登录中,通常不直接使用对称加密来传输密码或会话数据,因为这样做需要事先在网络上安全地交换密钥,这在安全性方面存在挑战。
通俗的讲,对称加密的密钥是相同的。用同一把钥匙加密和解密。
2.2 非对称加密
非对称加密使用一对公钥和私钥,其中公钥可以公开分发而私钥必须保密。常用的算法有RSA、DSA等。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
通俗的讲,非对称加密的公钥和私钥是不同的。用一把钥匙加密的信息只能用另一把钥匙解密。
2.2.1 公钥(Public Key):
- 可以自由分发给任何人。
- 用于加密信息,只有对应的私钥能解密。
2.2.2 私钥(Private Key):
- 需要严格保密,仅由用户持有。
- 用于解密用公钥加密的信息,或者签名信息以证明信息的来源。
3. SSH免密登录原理
]
4. 具体步骤
4.1 生成密钥对
首先,用户需要在本地机器上生成一对公钥和私钥。这个过程通常使用ssh-keygen命令完成。
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:公钥文件,可以公开。
4.2 将公钥复制到远程服务器
接下来,用户需要将生成的公钥文件(id_rsa.pub)的内容复制到远程服务器的~/.ssh/authorized_keys文件中。这个过程可以通过多种方式完成,最常见的是使用ssh-copy-id命令。
ssh-copy-id user@remote_host
执行上述命令后,系统会提示用户输入远程服务器的密码。ssh-copy-id会将本地公钥文件的内容追加到远程服务器的~/.ssh/authorized_keys文件中。
4.3 免密登录
当用户在服务器A尝试通过SSH登录到服务器B时,以下步骤会自动进行:
- 服务器A发起连接请求
用户在服务器A上执行ssh user@remote_host命令,SSH客户端会向服务器B发起连接请求。 - 服务器B发送随机字符串
服务器B接收到连接请求后,会生成一个随机字符串,并使用服务器A的公钥对其进行加密,然后将加密后的字符串发送给服务器A。 - 服务器A使用私钥解密
服务器A接收到加密后的字符串后,使用本地存储的私钥对其进行解密,得到原始的随机字符串。 - 服务器A发送解密后的字符串
服务器A将解密后的随机字符串发送回服务器B。 - 服务器B验证
服务器B接收到服务器A发送的解密后的字符串后,会与之前生成的随机字符串进行比对。如果两者一致,说明服务器A拥有与公钥对应的私钥,验证通过,允许用户登录。
评论区