Linux配置免密码登录(原理 + 实践)

SSH之所以能够保证安全,原因在于它采用了公钥加密。

ssh整个登录过程 :
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。
因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

如何避免中间人攻击?

建议使用公钥登录,不要使用明文登录,首次明文登录之后可以禁止root用户的明文登录。

一、免密登录的原理

Linux免密登录,本质上是使用了”公钥登录”。原理很简单,就是用户将自己的 公钥 储存在远程主机上。登录的时候,远程主机会向用户发送一段 随机字符串,用户用自己的 私钥 加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。常见如Git的ssh方式也是通过公钥进行认证的。SSH公钥登录比密码登录更安全,密码登录可能存在中间人攻击。

客户端使用私钥,服务端使用公钥

二、操作步骤

生成公钥私钥对(既可以在服务端生成密钥对,也可以在客户端生成密钥对,还可以在其他地方生成的密钥对),默认存储在 ~/.ssh 目录下。
将公钥 id_rsa.pub 追加到服务端 ~/.ssh/authorized_keys 文件中,
将私钥 id_rsa 放到客户端 ~/.ssh/目录下

#生成密钥对
ssh-keygen -t rsa 
#(连续三次回车,即在本地生成了公钥和私钥,不设置密码,默认存储在 ~/.ssh目录下)

#将公钥 id_rsa.pub 追加到服务端 ~/.ssh/authorized_keys 文件中
#这里默认已经将公钥上传到了服务端
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys


#将私钥 id_rsa 放到客户端 ~/.ssh/目录下
#这里默认已经将私钥上传到了客户端
mv id_rsa ~/.ssh/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

客户端免密登录服务端命令:ssh remot_user@ip

当然客户端也可能是本地一款ssh连接工具,一样可以免密登录,我这里使用 MobaXterm 测试:

Linux配置免密码登录(原理 + 实践)_第1张图片

 Linux配置免密码登录(原理 + 实践)_第2张图片

你可能感兴趣的:(Linux,Linux配置免密码登录)