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

  • Post author:
  • Post category: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 测试:



版权声明:本文为u014644574原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。