密钥登录原理和ssh使用密钥实现免密码登陆
目录
1、公私钥简介与原理
公钥和私钥都属于非对称加密算法的一个实现,这个加密算法的信息交换过程是:
1) 持有公钥的一方(甲)在收到持有私钥的一方(乙)的请求时,甲会在自己的公钥列表中查找是否有乙的公钥,如果有则使用一个随机字串使用公钥加密并发送给乙。
2) 乙收到加密的字串使用自己的私钥进行解密,并将解密后的字串发送给甲。
3) 甲接收到乙发送来的字串与自己的字串进行对比,如过通过则验证通过,否则验证失败。
非对称加密算法不能使用相同的密钥进行解密,也就是说公钥加密的只能使用私钥进行解密。
2、使用密钥进行ssh免密登录
ssh使用私钥登录大致步骤就是:主机a(客户端)创建公钥私钥,并将公钥复制到主机b(被登陆机)的指定用户下,然后主机a使用保存私钥的用户登录到主机b对应保存公钥的用户。
(1) 实验环境
两台主机:
1) 主机a(客户机):192.168.187.137
2) 主机b(被登陆机):192.168.187.143
(2) 实验开始
- 在需要免密登陆的主机(主机a)下生成公钥和私钥
# ssh-keygen -t rsa ##-t rsa可以省略,默认就是生成rsa类型的密钥
说明:命令执行后会有提示,输入三次回车即可,执行完成后会在当前用户的.ssh目录下生成两个文件:id_rsa、id_rsa.pub文件,前者时私钥文件,后者是公钥文件(拷贝到其他主机只需要拷贝这个文件的内容)
- 将公钥复制到被登陆的主机上的 ~/.ssh/authorized_keys 文件中
拷贝公钥有两种方法,其原理都相同:
方式一:使用 ssh-copy-id 直接拷贝
使用 ssh-copy-id 进行拷贝公钥非常方便,只需要指定目标主机和目标主机的用户即可。
# ssh-copy-id -i ~/.ssh/id_rsa.pub
执行这条命令后会自动将登录主机的公钥文件内容追加至目标主机中指定用户(root).ssh目录下的authorized_keys文件中。这个过程是全自动的,非常方便。
方法二:自己创建文件进行拷贝
1) 在登录主机(客户机)上创建authorized_keys文件并将公钥追加到该文件。
先cd到登录机使用的用户下的 .ssh 目录,方便操作
# cat id_rsa.pub >> authorized_keys
# chmod 600 authorized_keys ##修改文件权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效
2) 在被登录机的指定用户家目录下创建 .ssh 目录(这里在root用户下创建,因为要使用密钥登陆到root用户)
# mkdir .ssh
# chmod 700 .ssh ##将目录权限改为700该目录的权限必须是700才有效
3) 将登录机创建的authorized_keys文件拷贝到被登录机,使用scp
# scp authorized_keys root@192.168.187.142:/root/.ssh/
authorized_keys 100% 402 576.4kb/s 00:00
- 登录
使用主机a乙root用户身份登陆到主机b
# ssh
last login: wed feb 13 15:24:30 2019 from 192.168.187.137
首次登录将弹出保存信息,输入yes即可,此时已经实现了免密的密钥登陆。
- 注意事项和说明
上例只能实现主机a免密登陆到主机b的root用户,如果想让主机b也免密登录到主机a,创建密钥和拷贝步骤相同。
密钥登陆的方式只能登录被登录机中 .ssh 目录下有对应公钥的用户,如果想让所有用户都可以被登录则需要将authorized_keys文件的内容追加到其他用户的 ~/.ssh/authorized_keys 文件中。
如果使用自己创建的authorized_keys文件进行复制公钥则要严格设置权限,权限不正确会导致文件无法使用,也就无法进行密钥验证。
3、 ssh的两种登陆方式介绍
(1) 口令验证登录
(2) 密钥验证登录
密钥验证的前提需要登陆主机生成一对密钥(公钥和私钥),并将公钥放置在服务器上。
4、 总结
ssh密钥登录可以实现免密登录,免密登陆有很多用途:例如scp免认证、rsync备份免交互等一切使用ssh认证的地方均可以免交互,也就实现了自动化。
密钥认证的大概步骤
1) 客户端(登录主机)生成一对密钥:# ssh-keygen
2) 将客户机的公钥复制到服务端(被登陆主机)要登录的用户的 ~/.ssh/authorized_keys 文件中:# ssh-copy-id -i ~/.ssh/id_rsa.pub
注意:如果使用自己复制的方法,一定要注意.ssh目录和authorized_keys文件的权限,前者是700,后者是600
3) 使用客户机ssh连接服务端或者使用ssh协议认证的程序即可实现免密,免交互
注意:要想两端登录同时免密,就在主机b(被登陆机)也创建密钥然后将公钥拷贝到主机即可。