前面的操作过程,都需要输入用户在远程主机上的口令(密码)。这显然不够自动化。我们可以将客户端的公钥放到服务器上,那么客户端就可以免密码登录服务器了。
其基本原理是:首先客户端将自身的公钥发送给服务器,服务器将其放入授权列表(authorized_keys)文件中,当有服务器带着公钥申请连接服务器时,目标服务器首先在authorized_keys中查找是否存在该公钥,与你发送过来的公匙进行比较。如果两个密匙一致,服务器就用该公匙加密“质询”(随机字符串)并把它发送给客户端。客户端收到“质询”之后,用自己的私匙解密再把它发送给服务器,服务器会将它与之前生成的随机字符串比对,如果一致,则允许免密登录。
因此客户端主机需要先创建密钥对。如
[NSOS1.1 ~]# ssh-keygen -t rsa #使用dsa算法是,使用命令ssh-keygen–t dsa
Generatingpublic/private rsa key pair.
Enterfile in which to save the key (/root/.ssh/id_rsa): #回车
Enterpassphrase (empty for no passphrase): #输入私钥密码,可以为空,即不设置密码
Entersame passphrase again:
Youridentification has been saved in /root/.ssh/id_rsa. #私钥
Yourpublic key has been saved in /root/.ssh/id_rsa.pub. #公钥
Thekey fingerprint is:
99:04:f3:2e:9a:bc:d6:37:98:da:3f:10:e7:1e:33:cbroot@NS
[NSOS1.1 ~]#
# 此时,.ssh下新增两个文件分别对应私钥和公钥
[NSOS1.1 ~]# cd /root/.ssh
[NSOS1.1 .ssh]# ll
total12
-rw-------1 root root 1743 Jan 7 13:07 id_rsa
-rw-r--r--1 root root 389 Jan 7 13:07 id_rsa.pub
-rw-r--r--1 root root 1184 Dec 31 16:23 known_hosts
[NSOS1.1 .ssh]#
为了使用基于私钥的安全验证,需要将产生的公钥传给服务器主机,
#在服务器端主机用户目录下创建.ssh文件,如果服务器主机用户与其他SSH服务器连接过,则会自动创建,此时无需再创建
[NSOS1.1 ~]# mkdir .ssh
[NSOS1.1 ~]# mv id_rsa.pub ./.ssh #放入公钥文件
[NSOS1.1 ~]# cd /root/.ssh
[NSOS1.1 .ssh]# ll
total4
-rw-r--r--1 root root 389 Jan 7 2016 id_rsa.pub
[NSOS1.1 .ssh]# chmod 700 id_rsa.pub
[NSOS1.1 .ssh]# ll
total4
-rwx------1 root root 389 Jan 7 2016 id_rsa.pub
[NSOS 1.1 .ssh]# cat id_rsa.pub>> authorized_keys #sshd默认使用的用户个人公钥文件是authorized_keys,因此需要将公钥文件放到该文件下
[NSOS1.1 .ssh]# chmod 600 authorized_keys #修改权限
[NSOS1.1 .ssh]# ll
total8
-rw-------1 root root 389 Jan 1 12:56authorized_keys
-rwx------1 root root 389 Jan 7 2016 id_rsa.pub
再回到客户端主机,登录远程服务主机
[root@localhost.ssh]# ssh 10.255.255.96
Lastlogin: Wed Aug 14 19:14:00 2019 from 10.255.255.93
[root@localhost~]#
可见,实现了免密登录。