Linux密钥rsa加密原理和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) 实验开始
1,在需要免密登陆的主机(主机A)下生成公钥和私钥
## -t rsa可以省略,默认就是生成rsa类型的密钥 ssh-keygen -t rsa ## 生成时指定格式:按以下命令生成 RSA 格式的密钥对即可 ssh-keygen -m PEM -t rsa
说明:命令执行后会有提示,输入三次回车即可,执行完成后会在当前用户的.ssh目录下生成两个文件:id_rsa、id_rsa.pub文件,前者是私钥文件,后者是公钥文件(拷贝到其他主机只需要拷贝这个文件的内容)。在linux上以“.”点开头的文件名或目录名称代表具有隐藏属性,通过ll命令或ls命令看不见。可通过 ll -a 或者 ls -lath 查看。
2,将公钥复制到被登陆的主机上的 ~/.ssh/authorized_keys 文件中
拷贝公钥有两种方法,其原理都相同:
方法一:使用 ssh-copy-id 直接拷贝
使用 ssh-copy-id 进行拷贝公钥非常方便,只需要指定目标主机和目标主机的用户即可。
## 通过ssh-copy-id工具分发公钥内容到被登陆机上指定用户目录下 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142
执行这条命令后会自动将登录主机的公钥文件内容追加至目标主机中指定用户(root).ssh目录下的authorized_keys文件中。这个过程是全自动的,非常方便。需要预先安装openssh插件。
方法二:自己创建文件进行拷贝
1) 在登录主机(客户机)上创建authorized_keys文件并将公钥追加到该文件。
先cd到登录机使用的用户下的 .ssh 目录,方便操作
## 进入当前用户的.ssh目录(按实际情况指定用户即可) cd ~/.ssh/ ## 将公钥追加到授权关键列表 cat id_rsa.pub >> authorized_keys ## 修改文件权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效 chmod 600 authorized_keys
2) 在被登录机的指定用户家目录下创建 .ssh 目录(这里在root用户下创建,因为要使用密钥登陆到root用户)
# 进入当前用户家目录(按实际情况指定) cd ~/ # 查看有没有.ssh目录,一般安装过openssh都会有 ls -lath # 如果确实没有,手动创建也一样 mkdir .ssh ##将目录权限改为700该目录的权限必须是700才有效 chmod 700 .ssh
3) 将登录机创建的authorized_keys文件拷贝到被登录机,使用scp
# 登录机上的.ssh/目录下操作 scp authorized_keys root@192.168.187.142:/root/.ssh/ authorized_keys 100% 402 576.4KB/s 00:00
当然你也可以直接拷贝登录机上的公钥id_rsa.pub内容文本,粘贴到被登录机上的authorized_keys文件里面粘贴,是一样的啦。
3,登录
使用主机A以root用户身份登陆到主机B
ssh root@192.168.187.142 # 登录成功如下 Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137
首次登录将弹出保存信息,输入yes即可,此时已经实现了免密的密钥登陆。
注意事项和说明:
1,上例只能实现主机A免密登陆到主机B的root用户,如果想让主机B也免密登录到主机A,创建密钥和拷贝步骤相同。
2,密钥登陆的方式只能登录被登录机中 .ssh 目录下有对应公钥的用户,如果想让所有用户都可以被登录则需要将authorized_keys文件的内容追加到其他用户的 ~/.ssh/authorized_keys 文件中。
3,如果要在登录机上登录很多台目标机器,那么将公钥分发到每一台目标机器上就行,步骤同上。
4,如果使用自己创建的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 root@192.168.187.142
注意:如果使用自己复制的方法,一定要注意.ssh目录和authorized_keys文件的权限,前者是700,后者是600
3) 使用客户机ssh连接服务端或者使用ssh协议认证的程序即可实现免密,免交互
注意:要想两端登录同时免密,就在主机B(被登陆机)也创建密钥然后将公钥拷贝到主机即可。
linux的无密码登录,利用RSA加密原理。使用rsa生成公钥和私钥。
可以理解为:公钥是锁放在被登录的服务器上,私钥是钥匙放在客户端。锁和钥匙匹配就可以登录。
1,安装相关软件:
yum install ssh
ssh里包含ssh和ssh-keygen
2,在客户机生成公钥和私钥:方法在前面讲过,这里省略。生成:id_rsa.pub(公钥-锁) 和 id_rsa(私钥-钥匙)
3,将公钥放的被登录机器:方法在前面讲过,这里省略。如果拷贝id_rsa.pub到authorized_keys(注意可能会多拷贝回车,可以拷贝编辑器检查一下)
4,登录服务器:
ssh 目标用户@目标ip
5,文件介绍;
客户机端:
id_rsa.pub(公钥-锁)
id_rsa(私钥-钥匙)
known_hosts(记录链接到对方时,对方给的hostkey,连线会检查目前对方给的hostkey 与记录的hostkey是否相同,进行简单的验证)
被登录机端:
authorized_keys (被登录机的公钥放置文件--锁的位置,可能会有多个锁)