配置 Windows 和 WSL2,使得能通过其他电脑远程 SSH 到 WSL2 Ubuntu。

一、Win10 安装 WSL2 Ubuntu

注意,是安装 WSL2,方法参考这个

步骤描述:

  1. 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart;
  2. 安装 “适用于 x64 计算机的 WSL2 Linux 内核更新包”;
  3. 将 WSL 设置默认 version 2,in PowerShell: wsl --set-default-version 2;
  4. 安装 Ubuntu,in PowerShell: wsl --install -d Ubuntu-22.04。

二、配置 SSH server(在 Ubuntu 执行)

进入 Ubuntu

#修改软件源
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y

如果是按照 《WSL2 配置 C++ 开发环境》安装 Ubuntu 的话这一步无需(因为安装过程已经更新了软件源)

安装配置 ssh 服务

sudo apt install openssh-server
sudo vim /etc/ssh/sshd_config
# 修改下面几个配置
# Port 2222
# AddressFamily any
# ListenAddress 0.0.0.0
# PermitRootLogin yes
# PasswordAuthentication yes # 如果启动遇到这个错误 请执行下面命令: sshd: no hostkeys available -- exiting
sudo ssh-keygen -A # 启动ssh服务
sudo /usr/sbin/service ssh start
# or 重启 SSH 服务
sudo service ssh --full-restart # 查看 wsl IP 地址
ip addr show # 172.17.187.242

三、Win10 防火墙设置

打开控制面板\系统和安全\Windows Defender 防火墙。

  • 最左边有高级设置
  • 右键点击入站规则
  • 新建入站规则
  • 点击端口,特定端口设置 2222
  • 然后命名之后一路下一步就行

或者通过 shell 设置,以管理员身份打开 PowerShell:

New-NetFirewallRule -Name sshd -DisplayName 'sshd for WSL' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222

参考于:wsl2设置端口转发方法

四、本地验证 SSH 访问 Ubuntu

打开 Windows Terminal,尝试 ssh 访问 Ubuntu

ssh -p 2222 wsluser@localhost

如果连接上说明 ssh 配置已经完成。

五、Ubuntu ssh 服务开机自动启动

WSL2 Ubuntu 的 ssh 服务不是跟着 Win10 开机自动启动的。在 Win10 的%USERPROFILE%目录下面新建文件sshd.bat

rem sshd.bat
@echo off
setlocal C:\Windows\System32\bash.exe -c "sudo /usr/sbin/service ssh start"
rem C:\Windows\System32\wsl.exe -e "sudo /usr/sbin/service ssh start" endlocal

注意上面 bash.exe -c 和 wsl.exe -e 两个功能是一样的。bash 后面不维护了,wsl 是官方推荐命令,但是 bash 有输出。

接下来把上面的脚本配置成开机自动执行:

  • 按下 Win 键,搜索“任务计划程序”,右边点击“创建任务”。
  • 常规:设置任务名字“Start WSL SSH”,勾选上“使用最高权限运行”(这是给后面网卡映射命令的权限)
  • 触发器:新建,选择“启动时”
  • 操作:选择上面的 sshd.bat 脚本文件。

保存,重启电脑,打开 Terminal,重新试试ssh -p 2222 wsluser@localhost

六、网卡映射

到目前为止,在 Win10 本地已经可以在开机后直接通过 SSH 访问 Ubuntu 了,但是你如果在局域网内的其他电脑访问,还是连不上的。这是因为 WSL2 是个虚拟机。

WSL 2 is a well-hidden virtual machine, but it is still a virtual machine—and the consequences of this design are leaky. The network interface we see within WSL is a virtual interface that does not match the physical interface that Windows manages. Windows does a good job at hiding this fact when operating directly on the local machine (e.g. you can SSH into WSL from localhost and it will work), but attempts to reach WSL from a separate machine will fail.

设置开机自动执行网卡映射命令,将上面的 sshd.bat 文件改成如下:

rem sshd.bat
@echo off
setlocal C:\Windows\System32\bash.exe -c "sudo /usr/sbin/service ssh start"
rem C:\Windows\System32\wsl.exe -e "sudo /usr/sbin/service ssh start" C:\Windows\System32\netsh.exe interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0 protocol=tcp for /f %%i in ('wsl hostname -I') do set IP=%%i
C:\Windows\System32\netsh.exe interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=%IP% endlocal

保存后启动,在 macbook 试试,成功。

在 macOS 通过 SSH 访问 Windows 的 WSL2 Ubuntu的更多相关文章

  1. Java ssh 访问windows/Linux

     Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...

  2. MacOS通过ssh连接基于Virtualbox的Ubuntu虚拟机

    以前总是用Windows软件putty进行ssh连接,今天尝试使用macos. 实验环境:主机:macos 10.15.3 客户机:Ubuntu 18.04 默认情况下,Ubuntu没有安装SSH,需 ...

  3. 通过ssh访问虚拟机中的ubuntu系统

    首先把 network 连接方式由 NAT 改为 Bridge Adapter,这样虚拟机中的 ubuntu 就可以有独立的 IP 地址. 安装 openssh: sudo apt-get insta ...

  4. windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)

    windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点   平时需要查阅一些技术资料,光走VPN太浪费流量,所以这儿教大家一种使用火狐浏览器的插件 AutoPr ...

  5. 分享CCNTFS小工具,在 macOS 中完全读写、修改、访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,简单设置即可高速传输外接NTFS硬盘文件

    CCNTFS [ 下载 ] 在 macOS 中完全读写.修改.访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,安装后进行简单设置即可高速传输外接NTFS硬盘文件,可全程离线使 ...

  6. 【转】Cygwin访问Windows驱动器

    From:http://www.cygwin.cn/site/info/show.php?IID=1000 由于自己的项目需要使用Linux内核,所以自己在windows下安装了一个Linux虚拟机! ...

  7. nat123外网SSH访问内网LINUX的N种方法

    一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限,LINUX主机部署在路由内网.如何实现外网SSH访问内网LINUX主机? 2,解决方案: 使用nat123动态域名解 ...

  8. 外网SSH访问内网LINUX的N种方法

    外网SSH访问内网LINUX的N种方法 http://www.nat123.com/Pages_8_260.jsp 一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限, ...

  9. virtualbox下面安装ubuntu后外网如何远程ssh访问

    这两天在折腾virtualbox安装linux的事情,想多弄几个节点,装hadoop, 环境如下 两台thinkpad, 一台正常上班用的,win7 一台装的ubuntu kylin 16.04, 上 ...

  10. Mac OS X 访问 Windows 共享文件夹

    Mac OS X 访问 Windows 共享文件夹 mac没有网络邻居,但可以使用finder访问局域网中windows共享的文件 1.点击 Finder 前往菜单中的「前往服务器」(或快捷键 com ...

随机推荐

  1. Android 输入系统介绍

    目录 一.目的 二.环境 三.相关概念 3.1 输入设备 3.2 UEVENT机制 3.3 JNI 3.4 EPOLL机制 3.5 INotify 四.详细设计 4.1 结构图 4.2 代码结构 4. ...

  2. 解决IDEA加载maven工程缓慢

    如图,哪里没有加哪里 -DarchetypeCatalog=internal

  3. python的websockets库

    安装 pip install websockets 分为客户端和服务端两部分 服务端一般与异步的库一起用 因为客户端不可能只服务一个客户 所以要用异步处理多个客户 以asyncio示例 from we ...

  4. 解决启动Typora时候,出现This beta version of Typora is expired,please download and install a newer version.

    一.问题说明 出现以下问题说明,该软件进行了对系统的时间检测,如果是最新的时间,就会报错,如果是之前的时间就不会.(比如2021年的时间) 二.问题解决 1.手动更改系统时间 打开"控制面板 ...

  5. Fast ORM 读写分离功能使用方式

    Fast Framework 作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer O ...

  6. [USACO2007FEBS] Cow Party S

    题目描述 寒假到了,\(n\) 头牛都要去参加一场在编号为 \(x\) 的牛的农场举行的派对,农场之间有 \(m\) 条有向路,每条路都有一定的长度. 每头牛参加完派对后都必须回家,无论是去参加派对还 ...

  7. [ABC263F] Tournament

    Problem Statement $2^N$ people, numbered $1$ to $2^N$, will participate in a rock-paper-scissors tou ...

  8. zookeeper JavaApi 查询节点

    /** * 1.查询数据 :get * 2.查询子节点 : ls * 3.查询节点的状态信息 :ls -s * * */ @Test public void testGet1() throws Exc ...

  9. 记一次 .NET某工控 宇宙射线 导致程序崩溃分析

    一:背景 1. 讲故事 为什么要提 宇宙射线, 太阳耀斑 导致的程序崩溃呢?主要是昨天在知乎上看了这篇文章:莫非我遇到了传说中的bug? ,由于 rip 中的0x41变成了0x61出现了bit位翻转导 ...

  10. 【Python】【OpenCV】定位条形码(二)moments和HuMoments

    根据上一篇博客可知,单纯的通过求取最大面积而进行定位的局限性,因此我们接下来将通过cv2.moments()和cv2.HuMoments()这两个方法来在更复杂的环境中去找到我们的目标区域. cv2. ...