前言
在Linux中,ssh是我们常用的远程登录方式。
但是,你有没有觉得每次登录时都要输入密码很麻烦。
尤其是“安全系数高”的密码…
那么有没有什么办法可以提高登录效率呢?
当然有,那就是ssh免密登录!
本文就来聊一聊ssh免密登录的原理与应用。
原理
SSH 免密登录的核心原理是非对称加密。
它基于公钥认证,使用一对加密密钥(公钥与私钥)来确保只有拥有正确私钥的客户端才能成功登录。
它具有以下优点:
- 安全性高:私钥保存在客户端计算机,只有持有正确私钥的客户端才能成功认证。
- 效率高:不需要在每次连接时输入密码,并且降低了密码泄露的风险。
以下是 SSH 免密登录的详细工作原理:
结合上图,当客户端使用 ssh username@remote_host
进行连接时,会经历以下步骤:
-
连接建立:客户端与服务器建立连接,服务器要求客户端进行身份验证。
-
公钥验证:
- 客户端提供它的公钥 ID,告诉服务器它打算使用哪个公钥进行认证。
- 服务器在
~/.ssh/authorized_keys
文件中查找是否包含该公钥。
-
挑战-响应:
- 如果服务器找到了匹配的公钥,它会生成一个随机数(称为挑战),并使用该公钥加密这个挑战,然后将加密的挑战发送给客户端。
- 客户端使用它的私钥解密这个挑战。
-
响应验证:
-
客户端将解密后的挑战返回给服务器。
-
服务器验证返回的挑战是否正确。
-
如果正确,则身份验证通过,客户端可以登录服务器。
-
应用
通过正确配置和权限设置,可以实现安全可靠的免密登录,步骤如下:
1. 生成密钥对
在客户端计算机上,使用 ssh-keygen
生成一对密钥:
ssh-keygen -t rsa
一路按回车键,最终会在~/.ssh/
目录下生成两个文件:
- 私钥:通常命名为
id_rsa
。 - 公钥:通常命名为
id_rsa.pub
。
2. 配置公钥
将公钥复制到远程服务器的 ~/.ssh/authorized_keys
文件中:
ssh-copy-id username@remote_host
3. 登录
接下来我们就可以在客户端上使用 ssh username@remote_host
进行免密登录。
注意:
为了提高安全性,需要确保远程服务器上的
~/.ssh
目录和authorized_keys
文件具有正确的权限:ssh username@remote_host chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
希望本文对大家有帮助,最后欢迎大家关注我的微信公众号《嵌入式三分钟》