1、首先在客户端生成密钥文件
[root@hspEdu01 ~]# ssh-keygen -t rsa #这里用的是root用户生成密钥
选项解释:
Enter file in which to save the key (/root/.ssh/id_rsa): #默认存放在此路径
Enter passphrase (empty for no passphrase): #是否需要设置密码,这里不设置密码,默认回车即可
Enter same passphrase again: #再次输入相同的密码短语,因为没有设置密码所以继续回车
执行后在.ssh目录下生成了三个文件
id_rsa #私钥
id_rsa.pub #公钥
known_hosts #已知的对方公钥保存位置
接下来需要把本地生成的公钥上传到服务器端,这里使用scp方式上传
scp id_rsa.pub root@10.0.0.201:/root
客户端的操作到此结束
2、将公钥导入到服务端用户的公钥数据库(想让哪一个用户登入,就导入到它的公钥数据库 )
公钥库数据库文件位置:.ssh/authorized_keys
#这里用root用户演示如果没有.ssh目录则需要手动创建
[root@ZJLY ~]# mkdir .ssh #创建
[root@ZJLY ~]# cat id_rsa.pub >> .ssh/authorized_keys #以追加的方式写入公钥数据库,是因为还需要存其他的公钥
[root@ZJLY ~]# chmod 600 .ssh/authorized_keys #必须改权限,因为SELinux会限制个人权限否则不能生效(关闭selinux也可以)
3、修改服务端ssh配置文件
vim /etc/ssh/sshd_config #编辑服务端ssh配置文件
PubkeyAuthentication yes #是否使用公钥验证
AuthorizedKeysFile .ssh/authorized_keys #公钥保存位置
#既然已经开启公钥验证登入,那么应该 禁止密码验证登入
PasswordAuthentication no #禁止密码验证登入
修改完需要重启ssh服务
systemctl restart sshd
接下来就可以ssh私钥免密登入了
即无法使用账户密码登入