linux系统新建的普通用户不能ssh连接,root可以ssh
时间: 2025-03-20 16:09:18 浏览: 92
### Linux SSH 普通用户连接失败而 Root 用户正常的原因分析
当普通用户尝试通过 SSH 连接到服务器时出现问题,而 Root 用户可以正常连接,这通常是由以下几个原因引起的:
#### 1. 配置文件限制
SSH 的配置文件 `/etc/ssh/sshd_config` 中可能设置了仅允许特定用户组或用户登录。如果 `AllowUsers` 或 `AllowGroups` 参数未包含普通用户的用户名或所属组,则该用户会被拒绝访问。
- 如果存在如下配置项:
```bash
AllowUsers root alice bob
```
则只有 `root`、`alice` 和 `bob` 可以通过 SSH 登录[^1]。
- 类似地,如果有以下参数:
```bash
DenyUsers user1 user2
```
列出的用户将被显式拒绝访问。
#### 2. 密钥认证问题
对于基于密钥的身份验证方式,如果普通用户的 `.ssh/authorized_keys` 文件不存在或者不包含有效的公钥,也会导致连接失败。即使 Root 用户能够正常使用密钥认证,其他用户的密钥路径和权限也需要正确设置。
- 确保目标用户的家目录下的 `.ssh` 文件夹及其子文件具有正确的权限:
```bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
- 同时确认 SELinux 或 AppArmor 不会阻止对这些文件的读取操作[^3]。
#### 3. 权限不足
某些情况下,系统管理员可能禁用了密码身份验证功能 (`PasswordAuthentication no`) 并强制要求使用密钥认证。然而,如果没有为普通用户提供相应的私钥配对,他们就无法完成身份验证过程。
另外需要注意的是,在默认安装过程中,部分发行版可能会关闭 SFTP 功能或其他服务模块,从而影响非特权账户的操作能力。
#### 解决方法概述
针对上述提到的各种可能性,以下是具体的修复措施建议列表:
- **调整SSHD_CONFIG 设置**
编辑主配置文档并保存更改后记得重新加载守护进程来应用新的规则集。
```bash
vi /etc/ssh/sshd_config
# 添加或修改下面两行内容
PasswordAuthentication yes # 开启密码登陆模式(视需求决定)
PermitRootLogin prohibit-password # 对于安全性考虑推荐此选项代替简单的'no'
systemctl reload sshd # 应用改动后的设定值
```
- **检查授权钥匙状态**
若采用无密码形式进入机制,请核实对应个人资料里的公开加密串是否匹配以及其属性级别是否恰当。
```bash
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh/
restorecon -RvF ~/.ssh # 在启用SELinux环境里执行额外指令恢复安全上下文标签
```
- **排查日志记录**
查看最近发生的事件详情可以帮助定位具体障碍所在位置。
```bash
tail -f /var/log/auth.log # Debian-based systems like Ubuntu use this file name.
journalctl _SYSTEMD_UNIT=sshd.service --since today | grep 'Failed password'
```
---
### 示例代码片段展示如何调试与修正常见情形之一——缺少适当权限
假设我们怀疑是因为缺乏必要的文件所有权而导致的问题,那么可以通过下面这段脚本来批量纠正所有潜在受影响区域内的状况:
```bash
#!/bin/bash
# Define target directory and username variables here as needed.
TARGET_DIR="/home/example_user/.ssh"
USERNAME="example_user"
if [[ ! -d "$TARGET_DIR" ]]; then
echo "Error: Target Directory does not exist."
exit 1;
fi
chown -R ${USERNAME}:${USERNAME} "${TARGET_DIR}"
find "${TARGET_DIR}" -type d -exec chmod u=rwx,go= {} \; || true
find "${TARGET_DIR}" -type f \( -name "*.pub" -o -name "known_hosts*" \
-o -name "config*" \) -exec chmod u=rw,g=r,o= {} \;
echo "Permissions updated successfully!"
```
---
阅读全文
相关推荐

















