温馨提示×

centos如何免密配hdfs

小樊
51
2026-09-24 16:44:29
栏目: 智能运维

在 CentOS 上实现 HDFS 免密登录(通常是 NameNode 到 DataNode / 各节点之间 SSH 免密),核心就是 配置 SSH 公私钥认证。下面以 Hadoop 多节点环境 为例说明。


一、前提说明

  • 操作系统:CentOS 7 / 8
  • 用户:假设为 hadoop(也可以是 root,但不推荐)
  • 目标:NameNode 能 免密 SSH 登录 所有 DataNode(包括自己)

二、在 NameNode 上生成 SSH 密钥

在 NameNode 节点 执行:

su - hadoop
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

执行后会在 ~/.ssh/ 下生成:

  • id_rsa(私钥)
  • id_rsa.pub(公钥)

三、配置本机免密(NameNode 自己)

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

测试:

ssh localhost

首次会提示,输入 yes 后不应再要求密码。


四、将公钥分发到其他节点(DataNode)

假设 DataNode 主机名:

  • node1
  • node2

方法 1:使用 ssh-copy-id(推荐)

ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2

如端口不是 22:

ssh-copy-id -p 2222 hadoop@node1

方法 2:手动拷贝(无 ssh-copy-id 时)

在 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

五、关闭 SELinux(如失败可排查)

getenforce

如果是 Enforcing,可临时关闭:

setenforce 0

永久关闭(重启生效):

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

六、防火墙注意

确保 SSH 端口开放:

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

七、HDFS 启动验证

在 NameNode:

start-dfs.sh

查看是否还需输入密码:

jps

各节点应能看到:

  • NameNode
  • DataNode
  • SecondaryNameNode(如有)

八、常见问题排查

1. 仍提示输入密码

  • ~/.ssh 权限必须是 700
  • authorized_keys 必须是 600
  • 属主必须是当前用户
chown -R hadoop:hadoop ~/.ssh

2. Hadoop 用 root 启动但免密是 hadoop

HDFS 启动用户必须和 SSH 免密用户一致。


九、总结

HDFS 免密本质就是:

SSH 公钥认证 + 正确权限

如果你需要,我也可以按 单节点 / 伪分布式 / 完全分布式 给你一份完整配置示例。

0 踩