突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践20250301

突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践

背景与痛点

在现代开发环境中,开发者通常会面临不同操作系统之间的协同工作。例如:

  • 主要开发环境位于 Windows 的 WSL Ubuntu 子系统
  • 需要从局域网内的 Mac 设备进行远程访问和管理
  • 由于 WSL 默认采用 NAT 网络隔离(172.x.x.x 网段),导致:
    • 无法直接从局域网设备(如 192.168.x.x)访问 WSL 环境
    • 每次 WSL 重启时可能导致 IP 地址变化,影响网络连接(WSL2 特性)

因此,我们需要配置端口转发解决方案,确保从 Mac 等设备可以无缝访问 WSL 上的服务,包括 SSH 和 HTTP 服务。
在这里插入图片描述

网络架构解析

设备IP 地址网络类型访问关系
Windows 宿主机192.168.1.6局域网可直连
WSL Ubuntu172.22.192.1NAT 虚拟网络仅宿主机可访问
Mac192.168.1.44局域网可直连宿主机

系统级解决方案:Windows 端口转发配置

步骤 1:配置持久化端口转发

我们将使用 Windows 的 netsh 工具 来配置端口转发,确保可以从外部设备(如 Mac)访问 WSL 中的 SSH 服务和 HTTP 服务(如 8080 端口)。

1.1 配置 SSH 端口转发

首先,配置 WSL 的 SSH 服务访问,使 Mac 可以通过 SSH 连接到 WSL 环境。

# 以管理员身份运行 PowerShell
$wsl_ip = (wsl hostname -I).Trim()

# 配置 SSH 服务端口转发
netsh interface portproxy add v4tov4 `
    listenaddress=192.168.1.6 `
    listenport=5522 `
    connectaddress=$wsl_ip `
    connectport=22

这里的配置将 Windows 宿主机的 5522 端口转发到 WSL 上的 22 端口(SSH 服务)。你可以通过 Mac 使用 SSH 连接 Windows 的 5522 端口。

1.2 配置 HTTP(8080)端口转发

接下来,如果你希望 WSL 上的 8080 端口(通常是 Web 服务的端口)能够从 Mac 访问,则需要在 Windows 宿主机上配置另一个端口转发规则。

# 配置 HTTP 服务端口转发
netsh interface portproxy add v4tov4 `
    listenaddress=192.168.1.6 `
    listenport=8080 `
    connectaddress=$wsl_ip `
    connectport=8080

这样,Mac 就能够通过 192.168.1.6:8080 访问 WSL 上运行的 HTTP 服务(如一个 Web 应用)。

1.3 防火墙配置

为了限制访问权限,我们将防火墙规则配置为只允许来自 Mac 的请求。

# 配置防火墙规则,限制 Mac IP 地址
New-NetFirewallRule -DisplayName "WSL SSH Proxy" `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 5522 `
    -RemoteAddress 192.168.1.44  # 限制只允许 Mac 访问

New-NetFirewallRule -DisplayName "WSL HTTP Proxy" `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 8080 `
    -RemoteAddress 192.168.1.44  # 限制只允许 Mac 访问

总结:通过以上配置,Windows 宿主机将 5522 端口转发到 WSL 的 SSH 服务(22 端口),同时将 8080 端口转发到 WSL 上的 HTTP 服务(8080 端口)。Mac 设备可以直接通过这两个端口访问 WSL 中的相应服务。

步骤 2:配置自动启动脚本

为了保证每次启动 Windows 时都能自动设置端口转发规则,可以将这些配置写入 PowerShell 脚本并添加到启动任务中。

2.1 保存 PowerShell 脚本

将以下 PowerShell 脚本保存为 wsl_ssh_http_proxy.ps1,路径可以设置为 C:\Scripts\wsl_ssh_http_proxy.ps1

$port_ssh = 5522
$port_http = 8080
$wsl_ip = (wsl hostname -I).Trim()

# 清除旧规则
netsh interface portproxy reset

# 配置 SSH 服务端口转发
netsh interface portproxy add v4tov4 `
    listenaddress=0.0.0.0 `
    listenport=$port_ssh `
    connectaddress=$wsl_ip `
    connectport=22

# 配置 HTTP 服务端口转发
netsh interface portproxy add v4tov4 `
    listenaddress=0.0.0.0 `
    listenport=$port_http `
    connectaddress=$wsl_ip `
    connectport=8080

# 设置防火墙规则
New-NetFirewallRule -DisplayName "WSL SSH Proxy" `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort $port_ssh `
    -RemoteAddress 192.168.1.44  # 限制只允许 Mac 访问

New-NetFirewallRule -DisplayName "WSL HTTP Proxy" `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort $port_http `
    -RemoteAddress 192.168.1.44  # 限制只允许 Mac 访问
2.2 创建计划任务
  1. 打开 任务计划程序
  2. 创建一个新任务,设置触发器为 计算机启动时
  3. 在操作中设置为 powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\wsl_ssh_http_proxy.ps1

步骤 3:SSH 和 HTTP 服务的安全加固配置

3.1 SSH 安全加固

在 WSL 内禁用密码认证,以增强 SSH 服务的安全性。

# 禁用密码认证
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
3.2 HTTP 服务安全配置

如果你运行的是 Web 服务,确保只允许信任的 IP 地址访问,或者在 WSL 内进行防火墙配置,限制访问权限。

Mac 端专业级连接方案

方法 1:SSH 配置文件优化

为了更好地连接 WSL 环境,建议在 Mac 上配置 SSH 客户端,并指定对应的端口和身份验证文件。

# ~/.ssh/config
Host wsl-ssh
    HostName 192.168.1.6
    Port 5522
    User ubuntu_user
    IdentityFile ~/.ssh/wsl_key
    ServerAliveInterval 60
    TCPKeepAlive yes
    Compression yes

方法 2:建立 SSH 隧道代理

如果你希望通过 SSH 隧道同时访问 SSH 服务和 HTTP 服务,使用以下命令:

# 创建持久化隧道,转发 SSH 和 HTTP 服务
autossh -M 0 -N -L 2222:localhost:5522 -L 8080:localhost:8080 user@192.168.1.6

# 连接时直接使用
ssh -p 2222 localhost

高级运维策略

网络诊断工具包

# 连通性测试
mtr -rwzc 10 192.168.1.6

# 端口扫描
nmap -sT -p 5522,8080 192.168.1.6

# 流量监控
tcpdump -i eth0 port 22 -w ssh_traffic.pcap
tcpdump -i eth0 port 8080 -w http_traffic.pcap

自动化监控脚本

#!/bin/bash
ALERT_THRESHOLD=3
FAIL_COUNT=0

while true; do
    # 检查 SSH 服务
    if ! nc -z -w 3 192.168.1.

6 5522; then
        ((FAIL_COUNT++))
    else
        FAIL_COUNT=0
    fi

    # 检查 HTTP 服务
    if ! nc -z -w 3 192.168.1.6 8080; then
        ((FAIL_COUNT++))
    else
        FAIL_COUNT=0
    fi

    if [ $FAIL_COUNT -ge $ALERT_THRESHOLD ]; then
        echo "Warning: Service failure detected!"
    fi

    sleep 60
done

总结

通过这种配置,您可以实现以下目标:

  • 从 Mac 通过 SSH 访问 Windows 上的 WSL 环境
  • 外部设备访问 WSL 上运行的 HTTP 服务
  • 在系统启动时自动配置端口转发,避免重复操作
  • 通过适当的安全加固,提高 SSH 和 HTTP 服务的安全性

这些技术结合使得跨平台的开发环境更加流畅和安全,非常适用于在混合环境中开发与测试的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字样机:从技术革新到产业赋能的演进之路

摘要:数字样机作为产品全生命周期数字化的核心技术,旨在通过虚拟化建模与仿真技术重构传统工业研发范式。 数字样机(Digital Prototype,DP)技术是一种数字化设计技术,利用数字样机替代原型样机&#xff0c…

Ollama+LM Studio+Anything LLM本地部署大模型

主要用于自我学习大模型本地部署的实战 首先安装Ollama,官网OllamaGet up and running with large language models.https://ollama.com/ 安装LM Studio,官网 LM Studio - Discover, download, and run local LLMsRun Llama, Mistral, Phi-3 locally o…

fastadmin 后台sku 插件

老规矩先上效果图 新引用需要用到的js define([backend], function (Backend) {require.config({paths: {// vue: ../js/vue,//js省略,如果是vue.min.js,就学vue.minlayui: /assets/LayuiSpzj/layui/layui,//js省略,如果是vue.min.js&#x…

毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手,详细阐述居家养老管理模式兴起的…

【Redis】Redis 入门

借鉴枫枫知道 一、连接 redis 1.1 命令行连接 // 完整的命令 redis-cli -h 127.0.0.1 -p 6379 -a password// 简写 redis-cli// 认证,进行redis之后 auth password1.2 go 代码连接 package mainimport ("fmt""github.com/go-redis/redis" …

HVAC 设计:使用 Ansys Discovery 探索更好的设计

通过 Ansys Discovery 及其 2025 年新功能利用 CFD,通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战: 压力损失:设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…

【Redis】Redis初阶

🔥个人主页: 中草药 一、认识Redis Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储数据库,支持持久化、网络化访问,并提供多种数据结构操作,用作数据缓存。它由Salvatore …

帧中继+静态路由实验(大规模网络路由器技术)

一、帧中继实验 (1)实验拓扑图如下图所示: 帧中继交换机1接口两侧的DLCI值: 数据链路连接标识符(DLCI,Data Link Connection Identifier),DLCI值用于标识 永久虚电路 (PVC&#xf…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置:Microsoft Azure 注册使用免费服务: 需要信用卡,本人没有,所以没有完成注册

海洋cmsv9报错注入,order by 和limit注入

海洋cmsv9 1,我们拿到海洋cmsv9源码分析发现注入点,$rlist 2,seacms开源,可以知道seacmsv9系统数据库(mysql)为seacms,存放管理员账号的表为 sea_admin,表中存放管理员姓名的字段为…

Linux系统下基于mplayer媒体播放器

1、项目背景 随着多媒体技术的发展,各种音视频格式的流行,用户对媒体播放器的功能和性能要求 日益增加。MPlayer是一个强大的开源媒体播放器,支持多种音视频格式。本项目旨在 基于MPlayer构建一个轻量级的Linux媒体播放器,提供简洁…

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m,分别表示数组的…

2025 软件供应链安全情报预警平台建设与实践

何为数字安全供应链情报? 所谓的数字供应链开源安全情报主要针对目标是开源数字应用资产。包括开源组件,中间件和操作系统。开源安全情报类型可以分为三大类: 1 第一类是传统的安全漏洞风险情报,开源漏洞情报数据获取主要有2种渠…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判(入侵检测)​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

DeepSeek赋能智慧社区:提升社区治理,优化资源配置,带来全新变革

在数字化浪潮的推动下,智慧社区正逐渐成为城市发展的重要方向。作为一款先进的人工智能大模型,DeepSeek凭借其强大的多模态数据分析和智能决策能力,正在为智慧社区的建设注入新的活力。 标准规范及顶层设计指南、供应商整体解决方案合集、供应…

代理服务器与内网穿透/打洞

内网穿透 简单来说内网穿透就是让一个在私人IP的设备,能在公网上被别的主机访问到资源。 中间经过服务器将获取的数据转发给主机。 内网打洞 内网打洞,也叫 P2P 穿透或 NAT 穿越,是一种用于实现位于不同内网中的设备之间直接建立连接的技…

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链,继续使用基于 langgraph 链 ,对结构化数据库 SQlite 进行查询的方法。该系统建立以后,我们不需要掌握专业的 SQL 技能,可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…

Geek卸载软件安装使用教程

文章目录 一、Geek下载二、使用步骤 一、Geek下载 Geek Uninstallers最新版是一款高效、快速、小巧、免费的软件卸载与清理工具,旨在帮助用户删除系统上安装的程序。不同于其他的卸载程序,Geek Uninstaller执行深入扫描进程,并清除软件卸载后…