配置 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 -cwsl.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. 最小生成树(Kruskal Prim)

    最小生成树 (克鲁斯卡尔算法) Kruskal 给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给 ...

  2. A-B数对 (hash映射)

    题目大意: 第一行输入N,C 第二行输入n个数字 输出,求A - B = C的数对个数 样例 4 1 1 1 2 3 输出 3 思路:用STL容器map,map<num, times>,建 ...

  3. 七天.NET 8操作SQLite入门到实战 - 第三天SQLite快速入门

    前言 今天我们花费一个小时快速了解SQLite数据类型.SQLite常用命令和语法. 七天.NET 8操作SQLite入门到实战详细教程 第一天 SQLite 简介 第二天 在 Windows 上配置 ...

  4. 对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思

    一:背景 1. 讲故事 最近接连遇到了几起 2G 虚拟地址紧张 导致的程序崩溃,基本上 90% 都集中在医疗行业,真的很无语,他们用的都是一些上古的 XP,Windows7 x86,我也知道技术人很难 ...

  5. 【UniApp】-uni-app概述

    前言 好,经过我们前面文章的编写,大家可以了解到微信小程序开发相关的知识,了解完了这个微信小程序开发和云开发之后,从这篇文章开始,我再来给大家写一下关于 Uniapp 的知识. 好,开始,那什么是 U ...

  6. CentOS(7.6)环境下迁移Mysql(5.7)的data目录到指定位置

    第一步:关闭Mysql #关闭Mysql服务systemctl stop mysqld#查看Mysql服务状态 ps -ef|grep mysql 第二步:创建新目录,并拷贝数据文件 #创建data文 ...

  7. 28、错误error

    1.是什么? 在实际的项目中,我们希望通过程序的错误信息快速定位问题,但是又不喜欢错误处理:代码就会很冗余又啰嗦.Go语言没有提供类似Java.C#语言中的try...catch异常处理方法,而是通过 ...

  8. bash shell笔记整理——stat命令

    stat命令的作用 stat主要用于查看文件的详细信息,包括access time(atime).modify time(mtime).change time.权限.属主.属组等信息 atime:只有 ...

  9. 数字孪生和GIS结合能为智慧社区带来怎样的改变?

    数字孪生和地理信息系统(GIS)是当今智慧社区发展中的两个重要技术,它们的结合将为智慧社区带来根本性的改变和巨大的发展机遇.这种结合将深刻影响社区的规划.建设.运营和管理,为居民创造更智能.便利.宜居 ...

  10. 在eclipse中拖动项目到Tomcat服务器中报错:Project facet Java version 16 is not supported.解决办法

    补充,还有一种情况:拖不进来,但是根本不报错,解决办法: