在 CentOS 上实现 HDFS 免密登录(通常是 NameNode 到 DataNode / 各节点之间 SSH 免密),核心就是 配置 SSH 公私钥认证。下面以 Hadoop 多节点环境 为例说明。
hadoop(也可以是 root,但不推荐)在 NameNode 节点 执行:
su - hadoop
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
执行后会在 ~/.ssh/ 下生成:
id_rsa(私钥)id_rsa.pub(公钥)cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
测试:
ssh localhost
首次会提示,输入 yes 后不应再要求密码。
假设 DataNode 主机名:
ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
如端口不是 22:
ssh-copy-id -p 2222 hadoop@node1
在 NameNode:
scp ~/.ssh/id_rsa.pub hadoop@node1:/tmp/
在 node1:
mkdir -p ~/.ssh
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
getenforce
如果是 Enforcing,可临时关闭:
setenforce 0
永久关闭(重启生效):
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
确保 SSH 端口开放:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
在 NameNode:
start-dfs.sh
查看是否还需输入密码:
jps
各节点应能看到:
~/.ssh 权限必须是 700authorized_keys 必须是 600chown -R hadoop:hadoop ~/.ssh
HDFS 启动用户必须和 SSH 免密用户一致。
HDFS 免密本质就是:
SSH 公钥认证 + 正确权限
如果你需要,我也可以按 单节点 / 伪分布式 / 完全分布式 给你一份完整配置示例。