思路分析:
比如有两台主机,192.168.0.69,192.168.0.70。其中192.68.0.69上安装有ansible,为了使用ansible进行自动化运维,我们需要实现192.168.0.69向其他其他主机的单向ssh免密登录。
(单向ssh免密登录:192.168.0.69主机可以使用ssh免密登录到其他主机上,但其他主机不能使用ssh免密登录到192.168.0.69)
为了实现此功能。
我们需要在192.168.0.69上,生成密钥对(公钥id_rsa.pub,私钥id_rsa),然后将公钥追加到授权文件authorized_keys中
192.168.0.69:
192.168.0.70:
这里有个坑:
authorized_keys 这个文件的权限必须是600(,就算是644 也不行),否则无法由69免密登录到70
linux两台机器间使用无密远程登录(使用证书),以CentOS7为例
默认linux两台机器间使用密码远程登录:
ssh ip或ip映射地址
输入远程机器的密码
(/root/下默认是没有.ssh文件夹的,在上面使用ssh命令后,将自动生成 /root/.ssh目录)
如何简化,实现不需要密码就能远程登录?下面开始详细讲解:
两台机器的ip:
192.168.55.249
192.168.55.251
在249这台机器上执行命令
(1) 生成密钥对:公私钥(id_rsa 是私钥,id_rsa.pub是公钥)
ssh-keygen -t rsa # 一直回车即可
(2) 查看 /root/.ssh/ 下生成情况
cd /root/.ssh
ll -a
(3) 将公钥追加到授权文件中
cat id_rsa.pub >> authorized_keys
(4) 可以查看里面追加的公钥 --- 这一步不想查看可忽略
more authorized_keys
(5) 将 249 中的公钥复制到 251那台机器上
ssh-copy-id -i 192.168.55.251 #若192.168.55.251设置了映射地址,使用映射地址也行,eg: ssh-copy-id -i hadoop2
(下面可不做)
可在251那台机器上查看一下,authorized_key中的公钥信息,可发现和249那台的一样
(6) 验证一下
ssh 192.168.55.251
# 或 ssh hadoop2 (设置该ip的映射地址为hadoop2的话,vi /etc/hosts 进行设置)
此时,249已经能无密登录251了。
-----------------------------------------------
251若想能无密登录249,只需要在251那台机器上把上面代码执行一遍即可(即生成251那台机器的密钥对,把公钥添加到249那台机器的授权文件中)
251那台机器上:
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
more authorized_keys
ssh-copy-id -i 192.168.55.249
ssh 192.168.55.249
遇到的大坑:
配置ssh免密码登录后,仍提示输入密码
解决方法:
首先我们就要去查看系统的日志文件
tail
/var/log/secure
-n 20
发现问题的所在:Authentication refused: bad ownership or modes for directory /root
<1>再查看不能正常免密登陆的主机的 root目录 权限:drwxrwxrwx. 6 root root 217 Jul 26 10:26 root
<2>而能正常免密登陆的主机的 root目录 权限:drwxr-xr-x. 6 root root 4096 Jul 26 10:28 root
从日志暴露的问题分析:字面上可以看出是目录的属主和权限配置不当,对比<1>、<2>得知:SSH不希望root目录对组有写权限,通过下面命令改下
cd /
chmod 755 root (此时root目录权限变为:drwxr-xr-x )
然后我们再去登录,就能不用密码进入了。
[root@master /]# ssh master
Last login: Thu Jul 26 12:03:02 2018 from 192.168.0.150
[root@master ~]#