遇到该问题:kex_exchange_identification: read: Connection reset`的解决办法

kex_exchange_identification: read: Connection reset` 是一个非常常见的 SSH 连接错误。它表明在 SSH 客户端和服务器建立安全连接的初始阶段(密钥交换,Key Exchange),连接就被对方(服务器)强制关闭了。

这通常不是客户端的问题,而是服务器端因为某些原因拒绝了你的连接请求。

下面我们来系统地排查和解决这个问题,从最常见到最不常见的原因逐一分析。

1. 服务器端的 SSH 服务没有运行或崩溃

这是最常见的原因。sshd 服务可能没有启动,或者启动后因为某种错误退出了。

解决方案(在被连接的电脑,即 10.49.71.114 的 WSL 中操作):

  1. 检查 SSH 服务状态

    sudo service ssh status
    # 或者
    sudo systemctl status ssh
    
    • 如果你看到 Active: active (running),说明服务正在运行。
    • 如果你看到 Active: inactive (dead) 或类似信息,说明服务没有运行。
  2. 启动/重启 SSH 服务

    • 如果服务未运行,启动它:
      sudo service ssh start
      # 或者
      sudo systemctl start ssh
      
    • 如果服务正在运行但你怀疑它有问题,重启它:
      sudo service ssh restart
      # 或者
      sudo systemctl restart ssh
      
  3. 设置为开机自启(推荐)
    为了避免每次重启 WSL 都要手动开启,可以设置服务自启动。但 WSL1 不支持 systemd,WSL2 需要额外配置才能支持。一个简单的替代方法是编辑 ~/.bashrc~/.zshrc 文件,在末尾加入:

    # 检查 sshd 是否在运行,如果没有则启动
    if ! pgrep -x "sshd" > /dev/null; thensudo service ssh start
    fi
    

2. 防火墙问题

Windows 防火墙或者 WSL 内部的防火墙(如 ufw)可能阻止了 2222 端口的连接。

解决方案:

a) Windows 防火墙(最可能的原因)

你需要在作为服务器的 Windows 电脑上(即 10.49.71.114)添加入站规则,允许外部访问 2222 端口。

  1. 管理员身份打开 PowerShell。
  2. 执行以下命令,添加一个允许 TCP 流量访问 2222 端口的防火墙规则:
    New-NetFirewallRule -DisplayName "WSL SSH Inbound" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
    
    这条命令会创建一个名为 “WSL SSH Inbound” 的规则。

b) WSL 内部的防火墙(如果安装了的话)

  1. 在 WSL 终端中检查 ufw 状态:
    sudo ufw status
    
  2. 如果 ufw 是激活状态 (Status: active),需要允许 2222 端口:
    sudo ufw allow 2222/tcp
    

3. SSH 配置问题 (/etc/ssh/sshd_config)

服务器端的 SSH 配置文件可能设置了过于严格的连接限制。

解决方案(在 WSL 中操作):

  1. 编辑配置文件:

    sudo nano /etc/ssh/sshd_config
    
  2. 检查以下几个关键配置:

    • Port 2222:确保端口号是你正在使用的 2222
    • ListenAddress 0.0.0.0:确保 SSH 服务监听所有网络接口,这样局域网才能访问。如果它被设置为 127.0.0.1,就只有 WSL 内部能访问。
    • AllowUsersDenyUsers:检查是否有这些行。如果你设置了 AllowUsers,请确保你的用户名 hujh 在列表里。如果没有特殊需求,建议先将这两行注释掉(在行首加 #)。
    • MaxStartups:这个值定义了允许的并发未认证连接数。默认值通常是 10:30:100。如果短时间内有太多失败的连接尝试,可能会触发限制。可以尝试将其改得宽松一些,比如 MaxStartups 30:30:100,但这通常不是主要原因。
  3. 修改配置后,必须重启 SSH 服务才能生效:

    sudo service ssh restart
    

4. IP 地址问题

你需要确保你连接的 IP 地址 10.49.71.114 确实是 WSL 所在宿主机 Windows 的局域网 IP。

WSL2 在默认配置下,其网络是 NAT 模式,它有自己的一个虚拟 IP 地址,通常是 172.x.x.x 网段。从局域网的其他电脑直接访问这个虚拟 IP 是不行的。你必须通过宿主机 Windows 的 IP 地址,并设置端口转发

你已经在 Windows 上监听了 2222 端口,这很可能就是通过端口转发实现的。现在需要确认这个机制是否正确。

解决方案(在作为服务器的 10.49.71.114 电脑上操作):

  1. 获取 WSL 的 IP 地址:在 WSL 终端中运行 ip addrhostname -I,记下这个 IP(例如 172.20.13.14)。
  2. 获取 Windows 的局域网 IP 地址:在 Windows 的 CMD 或 PowerShell 中运行 ipconfig,找到连接到局域网的那个网络适配器(通常是“以太网适配器”或“无线局 vực 网适配器”),确认其 IPv4 地址就是 10.49.71.114
  3. 检查/设置端口转发:你需要一个规则,将从 10.49.71.114:2222 进来的流量转发到 [WSL的IP]:22(假设 WSL 里的 SSH 服务运行在默认的 22 端口)。
    • 管理员身份打开 PowerShell。
    • 运行以下命令来设置端口转发(请将 [WSL的IP] 替换为你在步骤1中找到的真实IP):
      netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=[WSL的IP]
      
      例如:netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.20.13.14
    • 重要:每次重启 WSL2,它的 IP 地址可能会改变。这会导致端口转发失效。可以写一个脚本来自动更新这个规则。

排查步骤总结

我建议你按照以下顺序进行排查:

  1. 【服务器端 WSL】 确认 SSH 服务状态并重启:sudo service ssh restart。这是最快最简单的尝试。
  2. 【服务器端 Windows】 检查并添加防火墙规则,允许 2222 端口入站。
  3. 【客户端】 在你的电脑上,用 -vvv 选项运行 SSH 命令,获取更详细的调试信息:
    ssh -vvv hujh@10.49.71.114 -p 2222
    
    仔细查看输出,它会告诉你连接断开前最后发生了什么,这对于定位问题非常有帮助。
  4. 【服务器端 Windows & WSL】 检查 WSL2 的 IP 地址和 Windows 的端口转发规则是否正确匹配。如果不确定,删除旧规则 (netsh interface portproxy delete ...) 并重新添加。
  5. 【服务器端 WSL】 检查 sshd_config 文件是否有过于严格的限制。

通常情况下,问题会出在第1、2、4步中的某一个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87541.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(论文蒸馏)语言模型中的多模态思维链推理

(论文总结)语言模型中的多模态思维链推理 论文名称研究背景动机主要贡献研究细节两阶段框架实验结果促进收敛性摆脱人工标注错误分析与未来前景 论文名称 Multimodal Chain-of-Thought Reasoning in Language Models http://arxiv.org/abs/2302.00923 …

React Native 接入 eCharts

React Native 图表接入指南 概述 本文档详细介绍了在React Native项目中接入ECharts图表的完整步骤,包括依赖安装、组件配置、数据获取、图表渲染等各个环节。 目录 1. 环境准备2. 依赖安装3. 图表组件创建4. 数据获取Hook5. 图表配置6. 组件集成7. 国际化支持8…

基于C#的OPCServer应用开发,引用WtOPCSvr.dll

操作流程: 1.引入WtOPCSvr.dll文件 2.注册服务:使用UpdateRegistry方法注册,注意关闭应用时使用UnregisterServer取消注册。 3.初始化服务:使用InitWTOPCsvr初始化 4.使用CreateTag方法,创建标签 5.读写参数使用下面三…

Java类加载器getResource行为简单分析

今天尝试集成一个第三方SDK,在IDE里运行正常,放到服务器上却遇到了NPE,反编译一看,原来在这一行:String path Test.class.getClassLoader().getResource("").getPath(); // Test.class.getClassLoader().ge…

【CodeTop】每日练习 2025.7.4

Leetcode 1143. 最长公共子序列 动态规划解决,比较当前位置目标和实际字符串的字母,再根据不同情况计算接下来的情形。 class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] t1 text1.toCharArray();char[] t2…

ES6从入门到精通:Promise与异步

Promise 基础概念Promise 是 JavaScript 中处理异步操作的一种对象,代表一个异步操作的最终完成或失败及其结果值。它有三种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败&#xf…

数据结构:二维数组(2D Arrays)

目录 什么是二维数组? 二维数组的声明方式 方式 1:静态二维数组 方式 2:数组指针数组(数组中存放的是指针) 方式 3:双指针 二级堆分配 💡 补充建议 如何用“第一性原理”去推导出 C 中…

HAProxy 和 Nginx的区别

HAProxy 和 Nginx 都是优秀的负载均衡工具,但它们在设计目标、适用场景和功能特性上有显著区别。以下是两者的详细对比:1. 核心定位特性HAProxyNginx主要角色专业的负载均衡器/代理Web 服务器 反向代理/负载均衡设计初衷高性能流量分发高并发 HTTP 服务…

基于Java+SpringBoot的健身房管理系统

源码编号:S586源码名称:基于SpringBoot的健身房管理系统用户类型:多角色,用户、教练、管理员数据库表数量:13 张表主要技术:Java、Vue、ElementUl 、SpringBoot、Maven运行环境:Windows/Mac、JD…

【MySQL安装-yum/手动安装,卸载,问题排查处理完整文档(linux)】

一.使用Yum仓库自动安装 步骤1:添加MySQL Yum仓库 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm步骤2:安装MySQL服务器 sudo yum install mysql-server -y步骤3:启动并设置开机自启 sudo systemctl start mysqld sudo systemct…

自定义线程池-实现任务0丢失的处理策略

设计一个线程池,要求如下:队列最大容量为10(内存队列)。当队列满了之后,拒绝策略将新的任务写入数据库。从队列中取任务时,若该队列为空,能够从数据库中加载之前被拒绝的任务模拟数据库 (TaskDa…

【NLP入门系列四】评论文本分类入门案例

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

Ubuntu安装ClickHouse

注:本文章的ubuntu的版本为:ubuntu-20.04.6-live-server-amd64。 Ubuntu(在线版) 更新软件源 sudo apt-get update 安装apt-transport-https 允许apt工具通过https协议下载软件包。 sudo apt-get install apt-transport-htt…

C++26 下一代C++标准

C++26 将是继 C++23 之后的下一个 C++ 标准。这个新标准对 C++ 进行了重大改进,很可能像 C++98、C++11 或 C++20 那样具有划时代的意义。 一:C++标准回顾 C++ 已经有 40 多年的历史了。过去这些年里发生了什么?这里给出一个简化版的答案,直到即将到来的 C++26。 1. C++9…

【MySQL】十六,MySQL窗口函数

在 MySQL 8.0 及以后版本中,窗口函数(Window Functions)为数据分析和处理提供了强大的工具。窗口函数允许在查询结果集上执行计算,而不必使用子查询或连接,这使得某些类型的计算更加高效和简洁。 语法结构 function_…

微型气象仪在城市环境的应用

微型气象仪凭借其体积小、成本低、部署灵活、数据实时性强等特点,在城市环境中得到广泛应用,能够为城市规划、环境管理、公共安全、居民生活等领域提供精细化气象数据支持。一、核心应用场景1. 城市微气候监测与优化热岛效应研究场景:在城市不…

【仿muduo库实现并发服务器】eventloop模块

仿muduo库实现并发服务器一.eventloop模块1.成员变量std::thread::id _thread_id;//线程IDPoller _poll;int _event_fd;std::vector<Function<Function>> _task;TimerWheel _timer_wheel2.EventLoop构造3.针对eventfd的操作4.针对poller的操作5.针对threadID的操作…

Redis 加锁、解锁

Redis 加锁和解锁的应用 上代码 应用调用示例 RedisLockEntity lockEntityYlb RedisLockEntity.builder().lockKey(TradeConstants.HP_APP_AMOUNT_LOCK_PREFIX appUser.getAccount()).value(orderId).build();boolean isLockedYlb false;try {if (redisLock.tryLock(lockE…

在 Windows 上为 WSL 增加 root 账号密码并通过 Shell 工具连接

1. 为 WSL 设置 root 用户密码 在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;时&#xff0c;默认情况下并没有启用 root 账号的密码。为了通过 SSH 或其他工具以 root 身份连接到 WSL&#xff0c;我们需要为 root 用户设置密码。 设置 root 密码步…

2730、找到最长的半重复子字符穿

题目&#xff1a; 解答&#xff1a; 窗口为[left&#xff0c;right]&#xff0c;ans为窗口长度&#xff0c;same为子串长度&#xff0c;窗口满足题设条件&#xff0c;即只含一个连续重复字符&#xff0c;则更新ans&#xff0c;否则从左边开始一直弹出&#xff0c;直到满足条件…