‌新手必看:Debian 13 虚拟机 SSH 连不上?我是怎么一步步调试成功的

前言

作为一名运维人员/程序员,SSH 连接失败几乎是每次接触新服务器都会遇到的"第一关"。这次我在全新安装的 Debian 13 Trixie 虚拟机上,碰到了一个非常典型的"Ping 通但 SSH 死活连不上"的问题。由于 Debian 13 默认搭载的是 OpenSSH 10.0p2,这是一个非常新且安全策略极其严格的版本,导致很多基于旧版 OpenSSH 的排查经验失效。

本文将完整记录从最初的 Destination host unreachable 报错,到最终成功登录的全过程。这不是一份简单的命令集合,而是一套面向新手的、可复用的分层排查方法论,帮你在碰到 SSH 问题时不再盲目试错。


一、故障初现:从"网络不可达"开始

刚开始我在 Windows 宿主机上尝试 SSH 连接,结果连最基础的 Ping 都不通。

C:\Windows\System32>ping 10.172.100.33 Reply from 10.172.100.125: Destination host unreachable.

这个报错非常关键,它不是普通的"请求超时",而是由本机网关直接返回的"目标主机不可达" 。这意味着数据包根本没有机会到达服务器,问题出在二层/三层网络链路层。

1.1 排查虚拟网络与 ARP 缓存

由于目标机是虚拟机,我首先怀疑是虚拟网络适配器状态异常。

  • 操作步骤:

    1. 打开 Windows "网络连接",找到对应的 VMware Network Adapter VMnet8(NAT 模式)或 VMnet1(仅主机模式)。
    2. 右键选择"禁用",等待 5 秒后重新"启用",强制刷新 Windows 网络栈。
    3. 以管理员身份打开 CMD,执行 arp -d * 清除所有僵死的 ARP 缓存条目。
    4. 再次 Ping 目标 IP。

经过这一步操作,Ping 立即恢复正常。这说明之前的故障根源是 Windows 宿主机的虚拟网卡 ARP 表学习失败,导致找不到虚拟机的 MAC 地址。


二、进入深水区:Ping 通了但 SSH 连不上

网络层通了,本以为 SSH 连接会水到渠成,结果输入命令后直接卡住或被拒绝。这时候问题从"网络层"转移到了"应用层"。

2.1 第一阶段排查:端口连通性

在深入 SSH 协议细节之前,必须先确认最基础的 TCP 22 端口是否开放。

  • 在 Windows PowerShell 中执行端口测试:

    Test-NetConnection 10.172.100.33 -Port 22

  • 结果分析:

    • 如果 TcpTestSucceeded 为 False:说明防火墙拦截了 22 端口,或者 SSH 服务根本没启动。
    • 如果为 True:说明端口是通的,问题出在 SSH 认证握手环节。

我当时的测试结果显示 TCP 端口是连通的,这说明问题出在更高阶的 SSH 协议协商上。


三、终极调试:使用 ssh -v 输出详细日志

普通的 SSH 命令只会返回简单的"Permission denied",根本看不出是哪一步出了问题。此时必须使用 Verbose 模式 开启详细调试。

ssh -v user@10.172.100.33

3.2 关键日志分析

在输出的大量日志中,我捕捉到了几个关键节点:

  1. 连接成功 :debug1: Connection established. ------ 网络没问题。
  2. 版本匹配 :Remote protocol version 2.0, remote software version OpenSSH_10.0p2 Debian-7+deb13u4 ------ 确认服务端是最新的 OpenSSH 10.0。
  3. 算法协商成功 :kex: algorithm: curve25519-sha256 ------ 密钥交换和加密算法握手成功。
  4. 认证阶段卡住 :debug1: Authentications that can continue: publickey,password ------ 服务器明确告诉客户端,它支持"公钥"和"密码"两种认证方式。
  5. 最关键的一行 :Enter passphrase for key 'C:\Users\Administrator/.ssh/id_rsa':

哦!原来问题出在这里。Windows 客户端本地有一个旧的 id_rsa 私钥,SSH 客户端默认会优先尝试公钥认证,它正在提示我输入这个本地私钥的解密密码(Passphrase),而不是服务器的登录密码。

我之前一直误以为这是在输服务器密码,导致反复输入错误。


四、强制跳过公钥,直接使用密码登录

既然服务器明确支持 password 认证,我可以强制 SSH 客户端跳过烦人的公钥尝试,直接走密码认证通道。

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@10.172.100.33

执行这条命令后,终端不再提示输入私钥 passphrase,而是直接正常显示了:

root@10.172.100.33's password:

然而,输入密码后依然返回了 Permission denied。

这说明最后一道关卡来了------Debian 13 的默认安全策略。


五、修改 Debian 13 SSH 配置,放行 Root 密码登录

Debian 13 作为前沿发行版,默认安全策略非常激进。它不仅默认锁定了 Root 账户,还在 SSH 配置中禁止了 Root 用户通过密码远程登录。

5.1 进入虚拟机控制台修改配置

由于无法 SSH,我直接在 VMware 虚拟机的本地终端中操作:

  1. 编辑 SSH 主配置文件:

    sudo nano /etc/ssh/sshd_config

  2. 找到并修改两个关键参数:

    • 将 PermitRootLogin 从 prohibit-password 改为 yes。
    • 将 PasswordAuthentication 从注释状态或 no 改为 yes。
  3. 特别注意覆盖配置 : 很多人改了主配置文件还是不生效,这是因为 Debian 13 引入了 /etc/ssh/sshd_config.d/ 目录。云镜像或系统默认的片段文件(如 50-cloud-init.conf)会覆盖主配置。必须进去检查,确保没有文件强行禁用密码登录。

5.2 Nano 保存退出(新手必看)

很多新手卡在了编辑器操作这一步,这里明确步骤:

  1. 改完内容后,按 Ctrl + O(字母 O)。
  2. 按 回车键 确认文件名,完成保存。
  3. 按 Ctrl + X 退出 Nano。

5.3 重启 SSH 服务

` # 先检查配置语法是否正确,防止重启后服务挂掉 sudo sshd -t

语法无误后,重启服务

sudo systemctl restart ssh `


六、最终验证,连接成功

回到 Windows CMD,再次执行之前的强制密码登录命令:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@10.172.100.33

输入正确的 Root 密码后,屏幕上终于出现了久违的命令提示符:

` Linux debian 6.11.0-1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.11.2-1 (2025-11-13) x86_64

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/...

root@debian:~# `

至此,整个调试过程圆满结束。


七、总结与最佳实践

这次排查过程让我深刻体会到,SSH 连接失败不是一个单一问题,而是一个分层的故障树。从下往上排查的思路非常重要:

  1. 物理层/链路层:Ping 不通,排查虚拟网卡、ARP 缓存、交换机。
  2. 网络层:Ping 通但端口不通,排查安全组、防火墙、服务是否启动。
  3. 传输层/应用层 :端口通但认证失败,使用 ssh -v 看日志,区分是算法协商失败还是密码/密钥权限问题。

对于 Debian 13 + OpenSSH 10.0 的新环境,强烈建议新手不要上来就折腾密钥,先用本文的方法强制开启密码登录,先把通道打通,后续再慢慢配置密钥免密登录,这样可以极大降低首次登录的调试门槛。

相关推荐
迪菲赫尔曼1 小时前
【基础篇 08】让VS Code连接服务器:界面在本地,文件保存到远端
运维·服务器·vscode·yolo·论文·教程·ultralyt
东方佑1 小时前
去魅:工具调用、Agent 调用、A2A、MCP、Harness 到底都是什么
服务器·网络·数据库
H.莓飛2 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
Dxy12393102162 小时前
Linux 压缩解压相关命令介绍
linux·运维·服务器
云飞云共享云桌面3 小时前
非标自动化工厂研发部门怎么实现一台服务器带10个SolidWorks设计并发
运维·服务器·人工智能·3d·自动化·电脑·制造
遇见小修修3 小时前
打印机无法连接故障:操作误区汇总与排查教程
运维·服务器
Elastic 中国社区官方博客3 小时前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十):KSM 同页合并 — 内容去重,把 N 份相同内存合并成 1 份
linux·运维·服务器
Huangjin007_4 小时前
【Linux 系统篇(三十三)】通信(三):System V 共享内存详解
linux·运维·服务器