Hadoop双节点集群Windows DataNode启动认证失败如何解决
解决跨平台Hadoop集群SSH认证失败问题
这个问题本质是Hadoop启动远程节点依赖SSH免密登录,虽然你没用到Kerberos,但Linux节点无法通过SSH无密码访问Windows节点,导致启动DataNode时报认证失败。下面是一步步的解决方案:
1. 确保Windows节点已安装并启用OpenSSH Server
Windows默认没有开启SSH服务,这是核心前提:
- 打开Windows设置 → 应用 → 可选功能 → 添加功能,找到「OpenSSH服务器」并安装
- 安装完成后,按下
Win+R输入services.msc,找到「OpenSSH SSH Server」服务,设置为「自动」并启动它
2. 配置Linux到Windows的SSH免密登录
生成SSH密钥对(如果还没有)
在Linux节点的终端执行:
ssh-keygen -t rsa
全程按回车即可,默认会在~/.ssh/目录生成id_rsa(私钥)和id_rsa.pub(公钥)。
复制公钥到Windows节点
你有两种方式:
- 方式一:用
ssh-copy-id(推荐,如果支持)
执行命令:
输入Windows用户的密码完成复制,这样公钥会自动写入Windows的ssh-copy-id <Windows用户名>@hadoopslave01C:\Users\<你的用户名>\.ssh\authorized_keys文件。 - 方式二:手动复制
在Linux上打开~/.ssh/id_rsa.pub,复制全部内容;然后在Windows上创建C:\Users\<你的用户名>\.ssh\authorized_keys文件(注意文件名是authorized_keys,没有后缀),把复制的公钥粘贴进去,保存。
关键:修复Windows端公钥文件权限
Windows对文件权限要求很严格,authorized_keys必须只有当前用户能访问,否则SSH会拒绝:
- 右键
authorized_keys文件 → 属性 → 安全 → 高级 - 点击「禁用继承」,选择「删除所有继承的权限」
- 点击「添加」,选择当前Windows用户,给它「完全控制」权限,其他用户一律删除
3. 测试SSH免密登录
在Linux节点执行:
ssh <Windows用户名>@hadoopslave01
如果能直接进入Windows的命令行(不需要输密码),说明免密配置成功了。如果还是失败,排查以下点:
- 检查Windows防火墙是否允许22端口入站:可以临时关闭防火墙测试,或者添加规则允许SSH(22端口)
- 确认Linux能解析
hadoopslave01:在Linux的/etc/hosts文件里添加一行Windows节点IP hadoopslave01 - 如果用了WSL的Linux,确保WSL和Windows处于同一网络(比如用桥接模式),能ping通Windows节点
4. 检查Hadoop配置细节
- 确认
workers(Hadoop 3.x)或slaves(Hadoop 2.x)文件里的主机名正确,比如如果Windows用户名不是Linux的用户名,可能需要写<Windows用户名>@hadoopslave01 - 可以在
hadoop-env.sh里添加一行,跳过主机密钥检查:export HADOOP_SSH_OPTS="-o StrictHostKeyChecking=no"
完成以上步骤后,再执行start-dfs.sh应该就能正常启动Windows节点的DataNode了。
内容的提问来源于stack exchange,提问作者Vish
相关产品推荐
相关产品推荐

