如何不用密码通过SSH远程登录linux主机?

本文主要参考此处.

如何不用密码就能通过ssh远程登录linux主机? 答案是使用SRA密钥来代替密码.

SRA是一种不对称密钥, 即它由一个公钥A和一个私钥B组成, 其中公钥A是公开的, 而私钥B只有自己知道. 如果某个人要通过加密给我们发送一项信息, 他就可以使用这个公钥对这项信息进行加密, 而只有私钥才能对加密后的信息进行解密 (公钥能对原来的信息进行加密, 但是不能对加密后的信息进行解密), 所以我们可以安全地得到这条信息而不用担心它会被别人偷窥. 

在使用ssh登录远程主机的时候, 我们也可以事先生成RSA的一个公钥A和一个私钥B, 然后把私钥保存在本地, 并默认使用这个私钥, 而将公钥放在远程主机的特定文件夹中. 当我们需要登录远程主机的时候, 我们的登录请求会把我们自己的公钥发送给远程主机, 之后远程主机检查这个公钥是否存放在它的本地. 如果这个公钥不存在, 则它就认为我们是一个为授权的用户, 因此拒绝我们的登录请求. 如果这个公钥存在, 则它将会用公钥对一个随机数进行加密, 并将这个加密后的随机数发送给我们, 如果我们能够把随机数解密出来并发送给它, 那就说明我们掌握了这个公钥对应的私钥, 因此它就可以认定我们是合法的用户, 因此完成了ssh的连接.

具体而言, 不用密码地通过SSH登录远程主机, 或者说使用SSH+RSA登录远程主机的步骤如下:

1. 首先在我们本地生成RSA的一对密钥:

ssh-keygen -t rsa

它会提示我们输入口令和密钥文件的存储位置, 这时我们只需要按"回车键"然后选择默认值就行. 

2. 进入~/.ssh/, 我们可以看到我们生成的私钥文件和公钥文件, 如下图. 其中id_rsa是私钥文件, id_rsa.pub是公钥文件.

3. 假设远程主机的账号为example, 它的IP地址为192.168.10.45, 账号example的主文件夹是/home/example, 则我们只需要把我们在本地生成的公钥文件id_rsa.pub复制到远程主机的/home/example/.ssh/文件夹下并命名其为authorized_keys就可以:

scp id_rsa.pub [email protected]:/home/example/.ssh/authorized_keys

注意, 这里仍然需要输入远程服务器的密码; 根据我的试验, 把id_rsa.pub文件复制到远程主机上的时候可以命名其为authorized_keys2, 但是不能将它命名成为hello, 说明远程主机上的公钥文件是不能随意命名的.

4. 最后, 在本地主机上可以直接登录远程主机如下而不必输入密码:

ssh [email protected]

猜你喜欢

转载自blog.csdn.net/nankai0912678/article/details/106735178