最后我发现了问题,我忘记指定用户名了,在mobaXterm上左上角打开会话,点击ssh,然后输入要连接的开发板主机的ip地址,关键在这里,要指定你要连接的开发板的系统中存在的用户,因为通过ssh连接一个设备时通过 用户名@ip地址 决定的,这个用户名必须是你的开发板系统中存在,可以在系统中自己通过命令查看你的系统有几个用户名。
关键总结:SSH 连接必须使用系统中存在的用户
问题的核心:SSH 连接时使用的用户名必须在开发板系统中真实存在。以下是详细解释和后续操作建议:
1. SSH 连接的本质!!!
• 连接格式:用户名@IP地址
(例如 root@192.168.1.187
)。
• 验证逻辑:
- 系统检查用户名是否存在。
- 若用户存在,验证密码或密钥。
- 若用户不存在,直接拒绝(
Access denied
)。
2. 查看开发板用户清单
通过 cat /etc/passwd | grep /home/
确认系统中存在的用户:
root:x:0:0:root:/home/root:/bin/sh # 可登录用户(shell 为 /bin/sh)
mosquitto:x:993:989::/home/mosquitto:/bin/false # 禁止登录(shell 为 /bin/false)
• 唯一可用用户:root
(其他用户如 Admin
不存在)。
3. 正确连接方式
在 MobaXterm 中创建 SSH 会话时:
- Remote host:
192.168.1.187
- Specify username:
root
(必须勾选并填写)
4. 如果仍提示 Access denied
即使使用 root
用户,仍需检查以下配置:
(1) Root 用户密码是否设置?
• 在开发板上执行:
passwd root # 设置或修改 root 密码
(2) Dropbear 是否允许密码登录?
• 编辑 /etc/default/dropbear
,确保配置中 没有禁用密码登录的参数:
# 错误配置示例(-s 表示禁用密码登录)
DROPBEAR_EXTRA_ARGS="-s -B"# 正确配置(允许密码登录)
DROPBEAR_EXTRA_ARGS="-B" # 允许空密码(仅测试环境使用)
# 或
DROPBEAR_EXTRA_ARGS="" # 正常密码验证
(3) 重启 Dropbear 服务
• 终止现有进程并重启:
killall dropbear # 停止服务
dropbear -F -E # 前台运行(调试模式,观察日志)
5. 创建新用户(可选)
若想要使用其它用户,非 root
用户(如 user1
),去创建用户:
useradd -m -s /bin/sh user1 # 创建用户并指定可登录的shell
passwd user1 # 设置密码
• 连接时使用:user1@192.168.1.187
6. 最终验证步骤
- MobaXterm 配置:
• 主机:192.168.1.187
• 用户名:root
• 密码:已设置的 root 密码。 - 点击连接,输入密码后应成功登录。
附:常见错误场景
场景 | 现象 | 解决方案 |
---|---|---|
用户名不存在 | Access denied | 使用 cat /etc/passwd 检查用户 |
密码错误 | Access denied | 通过串口连接开发板,在开发板上用 passwd 重置密码再去用ssh使用密码连接 |
SSH 服务未运行 | Connection refused | 启动 dropbear 或 openssh |
防火墙阻止 22 端口 | Connection timed out | 开放端口或关闭防火墙 |
通过以上步骤,应该能成功连接到开发板。如果仍有问题,可以再提供以下信息然后进行验证:
• dropbear
运行时的完整日志(通过 dropbear -F -E
前台运行)。
• 开发板 /etc/shadow
文件中 root
用户的密码哈希(确认密码是否生效)。