Step2—集群免密登录
# Step2—集群免密登录
免密登录是 Ambari 添加主机前必须做扎实的一步。生产环境更推荐使用专用安装用户,并只开放核心节点到工作节点的免密;实验环境或新装验证环境,可以临时做全节点互信,方便排查和文件分发。
本文示例仍使用 root,读者实际部署时可以换成具备 sudo 权限的安装用户。
| 节点 | IP | 安装用户 |
|---|---|---|
hadoop1.test.com | 192.168.3.101 | root |
hadoop2.test.com | 192.168.3.102 | root |
hadoop3.test.com | 192.168.3.103 | root |
注意
如果公司安全规范不允许 root 免密,请创建专用用户,例如 ambariadmin,并给它配置必要的 sudo 权限。不要为了省事长期保留 root 全互信。
# 安装 SSH 工具
三台节点都先确认 SSH 服务和 ssh-copy-id 可用。
sudo dnf -y install openssh-server openssh-clients sshpass || \
sudo yum -y install openssh-server openssh-clients sshpass
sudo systemctl enable --now sshd
2
3
4
sudo apt update
sudo apt install -y openssh-server openssh-client sshpass
sudo systemctl enable --now ssh
2
3
4
// Make sure to add code blocks to your code group
检查 SSH 端口:
ss -lntp | grep ':22 '
# 每台节点生成 SSH Key
分别登录 hadoop1.test.com、hadoop2.test.com、hadoop3.test.com,在同一个安装用户下执行。新环境优先使用 ed25519:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
if [ ! -f ~/.ssh/id_ed25519 ]; then
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N '' -C ambari-plus
fi
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
2
3
4
5
6
7
8
9
如果老系统不支持 ed25519,再用 RSA 4096:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N '' -C ambari-plus

# 分发公钥
Step3 还没有配置 /etc/hosts,所以这里先用 IP 分发,避免主机名解析没准备好导致误判。
在 hadoop1.test.com 上执行:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
2
3
在 hadoop2.test.com 上执行:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
2
3
在 hadoop3.test.com 上执行:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
2
3
如果 SSH 端口不是 22,要把 -p 带上:
ssh-copy-id -p 52207 -i ~/.ssh/id_ed25519.pub [email protected]
ssh -p 52207 -o BatchMode=yes [email protected] hostname -f
2
# 没有 ssh-copy-id 时手动追加
在源节点读取公钥:
cat ~/.ssh/id_ed25519.pub
在目标节点追加:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat >> ~/.ssh/authorized_keys <<'EOF'
ssh-ed25519 AAAA... ambari-plus
EOF
2
3
4
5
6
7
8
追加后检查:
wc -l ~/.ssh/authorized_keys
三节点互信做完后,每台机器通常至少有三条公钥记录。
# 先用 IP 做互信验证
每台机器都执行下面三条命令。这里仍然用 IP,等 Step3 配好 /etc/hosts 后再用主机名复测。
ssh -o BatchMode=yes [email protected] hostname -f
ssh -o BatchMode=yes [email protected] hostname -f
ssh -o BatchMode=yes [email protected] hostname -f
2
3
如果全部直接返回目标 FQDN,没有提示输入密码,就算通过。

# 权限和 sshd 配置检查
免密不生效时,先看权限:
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
2
再看 SSH 服务配置:
sudo sshd -T | egrep 'pubkeyauthentication|authorizedkeysfile|permitrootlogin'
如果禁用了 root 登录,生产环境建议改用专用安装用户,不建议长期放开 root。
# 常见问题
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
| 仍然提示输入密码 | 公钥没有写入目标节点 | 检查目标节点 authorized_keys |
Permission denied | key 未被接受、用户不对、root 登录被禁 | 看 sshd -T 和 /var/log/secure 或 /var/log/auth.log |
Bad owner or permissions | .ssh 权限过宽 | 重新设置 700/600 权限 |
| 第一次连接卡住 | 等待确认 host key | 手动登录一次并输入 yes |
| 主机名登录失败 | Step3 还没同步 /etc/hosts | 本步骤先用 IP,Step3 后再用主机名 |
完成后进入 Step3,同步主机名解析,再用 hadoop1.test.com、hadoop2.test.com、hadoop3.test.com 复测免密。