最后我發現了問題,我忘記指定用戶名了,在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
用戶的密碼哈希(確認密碼是否生效)。