环境:4台Linux RedHat 6.4 机器(192.168.1.126、192.168.1.127、192.168.1.128、192.168.1.130),
配置各台机器hadoop 用户的免密认证登陆,建立相互信任关系
1. 基础准备
- 4台机器分别:清空用户家目录/home/hadoop/下的.ssh文件夹(有其他重要文件可先行查看备份)
- 关闭防火墙 + 优化SELinux
https://blog.csdn.net/daoxu_hjl/article/details/85642931
2. 生成密钥文件
4台机器分别操作一次:
ssh-keygen -t rsa
说明:ssh-keygen -t [rsa|dsa],将会生成私钥文件和公钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub; -t 用来指定加密方式,若不指定,默认rsa,建议使用rsa
3. 交出公钥,建立单向信任关系
A机器若要免密访问B机器,则B机器中一定要存在A机器的公钥:即/home/hadoop/.ssh/authorized_keys中存在A机器id_rsa.pub文件的内容
127,128,130机器分别交出自己的公钥给126:
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@192.168.1.126
若B机器不存在.ssh文件夹或authorized_keys文件,则会自动创建对应目录或文件;若已存在则将A的公钥附加到authorized_keys文件中(不会覆盖原内容))
查看126的authorized_keys 可以发现存在其他3台机器的公钥文件内容
然后在126上,将126自身的公钥文件内容也附加到authorized_keys,建立与本身的免密关系:
cat id_rsa.pub >> authorized_keys
注:也可以通过scp或手动创建复制 生成authorized_keys文件及其包含的公钥内容
4. 共享authorized_keys文件到各台机器,建立双向信任关系
将126上包含所有机器公钥的authorized_keys文件分发到其他机器~./.ssh/目录下
scp ~/.ssh/authorized_keys hadoop@192.168.1.127:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@192.168.1.128:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@192.168.1.130:~/.ssh/
注:1. 也可以通过NFS方式共享服务端的authorized_keys文件 --> 便于修改:
(NFS文件共享参考:https://blog.csdn.net/daoxu_hjl/article/details/85416475)
授权文件放入共享目录: mv authorized_keys /opt/share
各节点机器分别创建 ~/.ssh/ 下授权文件的软链接文件: ln -s /opt/nfs_share/authorized_keys ~/.ssh/authorized_keys
只能本用户具有对密钥文件的写权限,必须修改权限: chmod 644 ~/.ssh/authorized_keys
ps: 若修改权限失败,则需要查看共享目录映射的属主是否正确(可能NFS客户端用户与服务的用户的uid&gid不一致,nfs根据id映射权限)
2. 免密码后可能依然有一个提示性验证,需要手动输入yes --> 影响后续程序间的交互
vim /etc/ssh/ssh_config
# 在/etc/ssh/ssh_config 文件末尾添加:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
3. 配置后依然无法生效: 文件或文件夹权限问题
文件权限: chmod 600 ~/.ssh/*
文件夹权限: chmod 700 ~/.ssh
(如果依然不行,将.ssh的上级目录也设置700权限)
具体报错可以查看日志:tail -30 /var/log/secure