1、安全密钥
加密是对信息进行编码和解码的技术,它通过一定的算法(密钥)将原本可以直接阅读的明文信息转换成密文形式。密钥即是密文的钥匙,有私钥和公钥之分。在传输数据时,如果 担心被他人监听或截获,就可以在传输前先使用公钥对数据加密处理,然后再行传送。这样, 只有掌握私钥的用户才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。
一言以蔽之,在生产环境中使用密码进行口令验证终归存在着被暴力破解或嗅探截获的 风险。如果正确配置了密钥验证方式,那么 sshd 服务程序将更加安全。
密钥就是密文的钥匙的简称,其实际上是一种加密算法,有公私钥之分。
2、无密码登录实现
以root用户身份登录主机A,然后通过命令ssh-keygen生成公私密钥对,将这个用户的公钥放到主机B上。这样,这个用户以后再用ssh连接主机B时,不用输入密码就能直接登录成功。
实现步骤:
1、root用户身份登录主机A,通过ssh-keygen命令生成公私密钥:
[root@jiang ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
#指定私钥的保存文件,不指定默认是/root/.ssh/id_rsa文件
Enter passphrase (empty for no passphrase):
#这里是为私钥设置密码,可以不设置,直接回车
Enter same passphrase again: #再次输入私钥密码
Your identification has been saved in /root/.ssh/id_rsa.
#私钥的配置文件是/root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub.
#公钥的配置文件是/root/.ssh/id_rsa.pub
2、将生成的公钥放到主机B上:
[root@jiang ~]# ssh-copy-id root@172.16.21.77
root@172.16.21.77's password:
Now try logging into the machine, with "ssh 'root@172.16.21.77'", and check in:
.ssh/authorized_keys #表示将公钥保存到主机B家目录下的.ssh/authorized_keys文件中
to make sure we haven't added extra keys that you weren't expecting.
3、验证是否成功:
ssh 主机B的IP
4、设置只允许密钥验证登录(可选)
可以对服务器B设置为只允许密钥验证登录,拒绝传统的口令验证方式。记得在 修改配置文件后保存并重启 sshd 服务程序。
在服务器B上进行下面设置:
[root@jt ~]# vi /etc/ssh/sshd_config
PasswordAuthentication no #在文件中找到这一行,并将yes修改为no
[root@jt ~]# systemctl restart sshd
这样,只有A服务器可以免密登录,其他服务器无法通过传统的口令验证方式登录B服务器,除非也设置免密登录。
5、配置ssh hostname登录方式
如果IP记不住,可以考虑设置这种登录方式。在服务器A上进行如下设置:
在/etc/sysconfig/network文件中添加:
NETWORKING=yes
HOSTNAME=*
在/etc/hosts文件的最后一行添加主机A和B的ip和主机名:
A_IP A_HOSTNAME
B_IP B_HOSTNAME
重启network服务:service network restart
6、可以通过ssh hostname登录主机
3、过程说明
1、ssh-keygen命令用于生成公私钥,可以加-t rsa,也可以不加;
2、每一个用户都有自己的公私密钥,不可混淆。用户的公私密钥都默认放在家目录的.ssh目录下
3、ssh-copy-id用于将公钥上传到别的主机,用法类似scp。通用格式是:
ssh-copy-id [-i 公钥文件] [用户名]@主机IP
不指定文件就默认上传公钥文件;
不指定以什么用户登录主机B的话,就默认以当前用户登录,前提是主机B有这个用户;
4、ssh-copy-id命令原理是将主机A公钥的内容添加到主机B的authorized_keys文件中;