普通用户ssh免密登陆完美解决(Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password))

本文详细介绍如何配置SSH免密登录,包括同一用户及不同用户间的登录过程,并特别强调了config文件的重要性及其权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又很久没写博客了,今天写一篇很有用的。嘿嘿,刚解决了问题,搞得我三天没睡好觉。

现在一身轻松,希望同样问题的小伙伴能解决同样的问题,睡个好觉,也是给自己留个笔记。


ssh免密登陆(我是使用hadoop集群时需要配置),从一台虚拟机ssh到另一台虚拟机,包括普通用户和root用户皆行。

接下来看我的骚操作(当然我大部分讲解的是主要的配置)

↓ 

首先你应该能ping通你的另一台机器。我使用的是虚拟机下的主机模式,不能上网,但是虚拟机间相互能通。(方法不同但相信大家应该都可以了)


ssh能连接的基本原理我废话说一句,你也应该知道,不然都不知道自己搞的什么:服务器生成一把密钥(id_rsa),一把公钥(id_rsa.pub)。将公钥拷贝到客户端的~/.ssh文件中再cat./id_rsa.pub >> ./authorized_keys,此时你便可以连接客户端了,具体的我们接着看下面。


在实现虚拟机之间ssh之前,我完成了本机对自己的ssh(ssh localhost、ssh username)这里是免密登陆的哦!!

拷贝你的公钥到另一台电脑:

scp ~/.ssh/id_rsa.pub root@名字:/home/hadoop/(当然更简单的方式就是直接将id_rsa.pub里面的东西复制到另一台的authorized_keys)


此时可以ssh一下了:


我是用root登陆的,显示不行,那是因为我关闭了root的登陆权限,如果你要使用root登陆可以执行

vi /etc/ssh/sshd_config


修改为PubkeyAuthentication yes(如果前面有#,就去掉#)


service sshd restart重启sshd服务后再次连接就行了


后面我们重点讲一下普通用户ssh到另一台电脑上(因为我在这里遇到了一个很大的坑!!!!!)

首先你可以试试 

ssh username@hostname

这里username是你要连接的电脑的用户名,hostname是它的地址。


如果可以的话,还是恭喜你。一次搞定。

如果失败

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

应该是你的配置文件出现了问题 /etc/ssh/sshd_config


这里我们使用简单的连接方式,很多同学可能也会使用另一种连接方式,那就是

ssh 名字

但是你会发现这样会出现

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

那是因为你没有指定连接的用户名,它会默认使用当前的用户名所以会错误。


如果你不嫌麻烦可以使用

ssh username@hostname

当然也可以使用以下简单的方式:映射关系

在.ssh文件下创建一个文本config(如果没有)

编辑文档:

Host hostname

user username

添加的是对你连接关系的映射。

从hadoop2使用ssh hadoop3时默认改为ssh hadoop3@hadoop3,而不是原来的ssh hadoop2@hadoop3了

最后修改的最重要的一点记住权限问题config文档的权限同组用户严格为不能写权限

修改:

chmod 644 config 或 chmod 600 config

再次使用 ssh 用户名 就ok了!!!



这篇文章我主要想说的就是config文件,不嫌麻烦你可以使用 ssh hadoop3@hadoop3,嫌麻烦你可以添加config文件的映射,直接ssh hadoop2。

至于前面的ssh连接我没有讲的太清楚,那些网上到处都是,就不说了 ~。~





<think>嗯,用户遇到了Hadoop集群启动时出现“Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)”的问题。根据提供的引用内容,这通常与SSH公钥配置有关。我需要一步步分析可能的原因和解决办法。 首先,用户的问题是在启动DataNode和SecondaryNameNode时出现的权限拒绝错误。Hadoop的节点间通信依赖于SSH无密码登录,所以问题可能出在SSH配置上。参考引用[1]和[2],常见原因是目标主机的公钥没有正确添加到authorized_keys文件中,或者文件权限设置不正确。 接下来,我需要检查几个方面:SSH密钥生成是否正确,公钥是否复制到目标主机,authorized_keys文件的权限是否正确,以及是否配置了本机到自身的免密登录。例如,引用[3]提到需要设置~/.ssh目录的权限为700,authorized_keys为600。此外,用户可能需要执行ssh-copy-id命令将公钥添加到目标主机,尤其是当涉及到本机登录时,比如hadoop103需要自己的公钥。 可能的解决步骤应包括生成密钥对,分发公钥,设置正确的文件权限,并验证SSH连接。另外,用户需要确保所有集群节点的主机名配置正确,并且在/etc/hosts文件中正确映射IP地址和主机名,避免因主机名解析问题导致的连接失败。 最后,需要提醒用户检查防火墙设置和SELinux状态,因为这些也可能影响SSH连接。如果所有步骤都正确执行,应该能解决权限被拒绝的问题,顺利启动Hadoop服务。</think>### Hadoop集群SSH免密登录配置与权限问题解决方案 当Hadoop集群启动DataNode或SecondaryNameNode时出现`Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)`错误,本质是**SSH免密登录未正确配置**,导致节点间无法通过密钥认证通信。以下是详细解决步骤: --- #### 一、核心问题分析 1. **SSH认证机制** Hadoop主节点需要通过SSH协议远程启动从节点的服务(如DataNode)。若未配置免密登录,系统会尝试密码登录,但Hadoop默认不支持交互式密码输入,因此触发权限错误[^1][^2]。 2. **典型错误原因** - 目标主机的公钥未存入`~/.ssh/authorized_keys` - SSH目录或文件权限过大(Linux要求严格权限) - 未配置本机到自身的免密登录(如`hadoop103`无法SSH到自身) --- #### 二、具体解决步骤 1. **生成SSH密钥对(所有节点执行)** 在**所有Hadoop节点**上执行: ```bash ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ``` 生成无密码的RSA密钥对,输出路径为`~/.ssh/id_rsa`和`~/.ssh/id_rsa.pub`。 2. **分发公钥到目标节点** - **跨节点分发**(如主节点到DataNode): ```bash ssh-copy-id hadoop103 # 将公钥复制到hadoop103 ``` - **本机自分发**(关键步骤): ```bash ssh-copy-id localhost # 允许本机免密登录 ssh-copy-id hadoop103 # 主机名需与/etc/hosts一致 ``` 3. **验证SSH连接** ```bash ssh hadoop103 date # 测试是否无需密码输出日期 ``` 4. **修正文件权限(关键)** ```bash chmod 700 ~/.ssh # 目录权限必须为700 chmod 600 ~/.ssh/* # 密钥文件权限必须为600 chmod 644 ~/.ssh/*.pub # 公钥文件权限可放宽 ``` --- #### 三、补充验证与调试 - **检查`authorized_keys`内容** 确认文件包含所有节点的公钥(如`hadoop102`, `hadoop103`, `hadoop104`等)。 - **主机名解析验证** 在`/etc/hosts`中确保所有节点IP与主机名正确映射: ```text 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 ``` - **防火墙与SELinux** 临时关闭防火墙和SELinux测试: ```bash systemctl stop firewalld # 关闭防火墙 setenforce 0 # 临时禁用SELinux ``` --- #### 四、成功验证 完成上述步骤后,重新执行集群启动命令: ```bash sbin/start-dfs.sh # 启动HDFS sbin/start-yarn.sh # 启动YARN ``` 观察日志中是否仍存在`Permission denied`错误[^3]。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值