共计 2396 个字符,预计需要花费 6 分钟才能阅读完成。
本文配置可实现:集群服务器之间相互可以 ssh 免密登录。若只想从单一机器(如 master)ssh 免密登录其他机器(slave1、slave2),则只跟着操作到第二步即可。
建议先花两三分钟把全文看完再跟着步骤操作
操作步骤:
1. 集群环境:master、slave1 和 slave2;操作系统为 CentOS7。为接下来叙述方便,除了 master,其他所有 slave 统称为 slaveX
所有服务器的 /etc/hosts 文件中都添加了必要的 IP 到主机名的映射,如下。
192.168.137.20 master
192.168.137.21 slave1
192.168.137.22 slave2
2. 配置使得 master 上可免密登录 slaveX。
在 master 主机上执行以下命令。可以是非 root 用户,我操作时用的是 Hadoop 用户。且根据我到目前为止的测试,用哪个用户来做配置,最后就只能通过那个用户实现免密登录,其他用户远程登录还是需要密码的。
2.1 cd ~ // 切换到用户家目录下
2.2 ls -al // 查看家目录下有无隐藏路径是 .ssh。如果没有,创建一个。注意查看.ssh 目录的权限,是否是 700 (drwx — —),不是的话修改为 700
2.3 cd .ssh // 进入到.ssh 目录下
2.4 ssh-keygen -t rsa // 命令执行时连续敲回车符即可;
// 该命令将会用 rsa 算法在~/.ssh 目录下生成私钥 id_rsa 和公钥 id_rsa.pub
2.5 ssh-copy-id master // 该命令把生成的公钥文件的内容追加到 master 的 authorized_keys 文件中;
// 注意执行此命令之前 authorized_keys 文件可能并不存在,没关系,直接执行该命令就行,会自动生成的,当然也可以自己创建一个;需注意 authorized_keys 文件的权限得是 600;
// 除了 ssh-copy-id 命令,也可以用 cat id_rsa.pub >> authorized_keys 的方式将公钥内容追加到 authorized_keys 文件中,实在不行你用复制粘贴的方式把内容追加进去应该也是可以的。
// 执行完该步骤之后在 master 上就可以通过 ssh master 命令免密登录自己了。(在这一步之前即使是通过 ssh 登录自己,也是每一次都需要手动输入密码的)
//authorized_keys 文件中的内容是以 ssh-rsa 开头的一组字符串,如下图:
注:图中的主机名跟文中描述的 master、slaveX 不一致,但是不影响对 uthorized_keys 文件中内容格式的理解。
2.6 ssh-copy-id slaveX // 把 master 的公钥追加到 slaveX 的 authorized_keys 文件中,之后 master 可免密登录 slaveX
3. 配置使得 slaveX 可以免密登录集群中其他机器
经过上面第二步之后,在 master 上便已经可以 ssh 免密登录 master、slaveX 了,但是从 slaveX 上依然无法 ssh 免密登录其他机器(master、slaveX),若想使得 slaveX 也像 master 那样可以免密登录其他机器,则需要在 slaveX 上也执行第 2 步同样的步骤,即:在 slaveX 上生成自己的私钥公钥对,然后将它的公钥追加到其他机器的 authorized_keys 文件中。
综上,若想配置集群服务器之间相互可以 ssh 免密登录,可以有以下两种方法:(两种方法的本质是一样的,只不过执行的过程步骤有些许不同)
方法一:一台一台服务器地按照第 2 步那样操作下去,直到所有机器都配置完成为止;
方法二:所有机器,包括 master 和 slaveX,先分别用 ssh-keygen -t rsa 命令生成各自的私钥公钥对,接着用 ssh-copy-id master 命令将 master 和 slaveX 的公钥都追加到 master 的 authorized_keys 文件中,当全部追加完毕之后,master 的 authorized_keys 文件中便已有集群中所有服务器(包括 master 自己和其他 slave)的公钥信息了(可知此时集群中所有机器都可免密 ssh 登录 master 了),它是一份完整的公钥信息文件,这个时候再用 scp 命令将 master 上的 authorized_keys 依次发送到各个 slave 的~/.ssh/ 目录下(scp 命令示例:scp ~/.ssh/authorized_keys hadoop@node01:~/.ssh/)。如此,便使得整个集群相互之间都可以免密 ssh 登录了。
——————————————————————————–
至于下面这一步,在网上查询资料时在个别博文中看到操作中有这步,我操作时没有配置这项,我不知道它对结果有什么影响,因为我没有做这步配置也使得 ssh 免密登录成功了。如果一定要配置的话,则是在第 2 步执行之前完成这项配置。
集群中的每台主机上
sudo vim /etc/ssh/sshd_config
开启下面的选项
RSAAuthentication yes // 允许用 RSA 密钥进行身份验证
PubkeyAuthentication yes // 允许用公钥进行身份验证
AuthorizedKeysFile .ssh/authorized_keys // 本机保存的公钥的文件(这个比较重要)
对于 /etc/ssh/sshd_config 文件,网上查询到的建议:『除非有必要,否则请不要更改 /etc/ssh/sshd_config 这个档案的设定值!』因为预设的情况下通常都是最严密的 SSH 保护了,因此,可以不需要更动他!