ssh 无密码验证 及 ssh localhost 仍然需要密码的解决方案

本文详细介绍如何在Linux系统上安装SSH服务,并通过生成公钥和私钥的方式实现SSH无密码登录。文章还介绍了如何检查SSH服务状态、设置正确的文件权限以确保安全,并解决了常见配置错误。

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

1、安装ssh

直接 sudo apt-get install openssh-server

2、查看ssh运行状态 

ps -e | grep ssh

如果发现 sshd 和 ssh-agent 即表明 ssh服务基本运行正常

3、生成公钥和私钥

ssh-keygen -t rsa -P ""

4、将公钥追加到文件

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

5、测试ssh localhost

如果发现不用输入密码就可以登录那么 ssh无密码机制就算建立成功了。

6、失败原因之一:.ssh及其下属子文件的权限问题:

首选.ssh目录权限是700, 两个dsa 和 rsa的 私钥权限是600,其余文件权限是644.

下面列出.ssh目录及子文件的权限表:

drwx------  2 hadoop hadoop 4096 2014-06-02 15:32 .
drwxr-xr-x 34 hadoop hadoop 4096 2014-06-02 15:06 ..
-rw-r--r--  1 hadoop hadoop 2252 2014-06-02 15:32 authorized_keys
-rw-------  1 hadoop hadoop  668 2014-06-02 15:11 id_dsa
-rw-r--r--  1 hadoop hadoop  615 2014-06-02 15:11 id_dsa.pub
-rw-------  1 hadoop hadoop 1675 2014-06-02 15:32 id_rsa
-rw-r--r--  1 hadoop hadoop  407 2014-06-02 15:32 id_rsa.pub
-rw-r--r--  1 hadoop hadoop  442 2014-06-02 15:08 known_hosts
7、.ssh的父目录的权限问题(我的问题就出现在这里):

.ssh的父目录文件权限应该是755,即所属用户的 用户文件 (/home下属的一个用户文件)。

<think>我们正在解决SSH免密登录配置后,执行`sshlocalhost`仍然提示输入密码的问题。根据引用内容,主要涉及权限设置和配置步骤。关键点:1.确保`~/.ssh`目录权限为7002.确保`~/.ssh/authorized_keys`文件权限为6003.确保公钥已正确添加到`authorized_keys`文件中4.检查`/etc/ssh/sshd_config`配置文件中的相关设置5.确保`/etc/hosts`中localhost的映射正确(特别是主机名映射)步骤:1.**生成密钥对(如果尚未生成)**在用户目录下执行:```bashssh-keygen-trsa```连续回车,使用默认路径(`~/.ssh/id_rsa`和`~/.ssh/id_rsa.pub`)。2.**将公钥追加到`authorized_keys`文件**```bashcd~/.sshcatid_rsa.pub>>authorized_keys```3.**设置正确的权限**```bashchmod700~/.sshchmod600~/.ssh/authorized_keyschmod600~/.ssh/id_rsa#私钥文件通常也设置为600chmod644~/.ssh/id_rsa.pub#公钥文件可以设置为644```4.**检查`/etc/ssh/sshd_config`配置**使用root权限编辑`/etc/ssh/sshd_config`,确保以下配置:```PubkeyAuthenticationyesAuthorizedKeysFile.ssh/authorized_keys```如果修改了配置文件,需要重启sshd服务:```bashsudosystemctlrestartsshd```5.**检查`/etc/hosts`文件**确保有正确的localhost映射,例如:```127.0.0.1localhost::1localhost```注意:如果主机名(通过`hostname`命令查看)没有映射到127.0.0.1,那么`ssh主机名`可能会失败。可以添加:```127.0.0.1your_hostname```6.**测试**```bashsshlocalhost```如果仍然要求输入密码,可以开启SSH的详细模式查看原因:```bashssh-vvvlocalhost```7.**检查SELinux状态**SELinux可能会影响,可以临时关闭SELinux测试:```bashsetenforce0```如果关闭后可以免密登录,则需要调整SELinux策略或永久关闭(不推荐永久关闭,生产环境应配置策略)。8.**检查用户家目录权限**用户家目录的权限不能过于开放,一般应为700或755。如果家目录权限是777,SSH会认为不安全而拒绝使用密钥认证。```bashchmod700~#如果家目录权限有问题```根据引用[1][2][3],权限问题是最常见的。请务必检查每一步的权限。如果以上步骤都正确,还是不能免密登录,请检查日志:```bashsudotail-f/var/log/secure```在尝试登录时,查看日志中的错误信息。注意:以上操作都是在当前用户下进行,如果使用sudo,则会切换到root用户,环境不同。如果配置了多个节点,请确保每台机器上都进行了相同的配置(特别是本机自登录)。最后,如果问题仍然存在,请提供`ssh-vvvlocalhost`的输出,以便进一步分析。相关问题:1.如何配置SSH免密登录到其他主机?2.SSH连接时出现"Permissiondenied(publickey)"错误如何解决?3.如何修改SSH的默认端口?</think>### 解决SSH免密登录localhost问题的完整指南 #### 📌 核心问题:`ssh localhost`仍需密码 根本原因是**密钥权限或配置错误**,需按以下步骤解决: --- ### 🔧 配置步骤 #### 1. 生成密钥对(若未生成) ```bash ssh-keygen -t rsa -b 4096 # 默认路径~/.ssh/id_rsa ``` * 连续回车三次(不设密码) * 生成文件:`id_rsa`(私钥) 和 `id_rsa.pub`(公钥) #### 2. 部署公钥到授权文件 ```bash cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ``` #### 3. 🔐 关键权限设置(**最常见问题**) | 路径/文件 | 必须权限 | 修复命令 | |-----------|----------|----------| | `~/.ssh/` | `700` (drwx------) | `chmod 700 ~/.ssh` | | `~/.ssh/authorized_keys` | `600` (-rw-------) | `chmod 600 ~/.ssh/authorized_keys` | | `~/.ssh/id_rsa` | `600` (-rw-------) | `chmod 600 ~/.ssh/id_rsa` | | 用户家目录(`~/`) | `755` (drwxr-xr-x) | `chmod 755 ~` | > ⚠️ **权限验证**: > ```bash > ls -ld ~ ~/.ssh ~/.ssh/authorized_keys # 检查权限列 > ``` #### 4. 验证SSH配置 编辑`/etc/ssh/sshd_config`: ```bash sudo vim /etc/ssh/sshd_config ``` 确保存在: ```config PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ``` 重启服务: ```bash sudo systemctl restart sshd ``` #### 5. 主机名映射检查 ```bash sudo vim /etc/hosts ``` 确保包含: ``` 127.0.0.1 localhost 127.0.0.1 $(hostname) # 替换为实际主机名 ``` #### 6. 最终测试 ```bash ssh -v localhost 2> ssh.log # 带日志输出 cat ssh.log | grep Authentication # 检查密钥是否被接受 ``` --- ### 🔍 故障排查表 | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | 仍提示密码 | 权限错误 | 执行`chmod`三步修复[^1][^2] | | `No such file` | 路径错误 | 检查`~/.ssh`是否存在 | | `Permission denied` | SELinux限制 | `sudo restorecon -Rv ~/.ssh` | | 密钥未加载 | SSH代理问题 | `eval $(ssh-agent) && ssh-add` | --- ### 💡 原理说明 SSH免密登录流程: 1. 客户端发起连接请求 2. 服务端检查`authorized_keys` 3. 用匹配的公钥加密随机数 4. 客户端用私钥解密并返回 5. 服务端验证通过建立连接 权限错误会中断第2步(SSH拒绝读取密钥文件)[^1][^2]。 --- ### 🌰 成功案例 ```bash $ ssh localhost Last login: Mon Jun 10 14:30:21 2024 from localhost # 无密码提示即成功 ``` ###
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值