Windows+WSL2+SSH实现远程办公

2023-11-16

Windows11+WSL2+SSH实现远程办公

在这里分享一下我如何实现用MacBook连接主机服务器远程办公,我目前有一台主机在寝室,但是在教室或者图书馆我手边是一台MacBook便不能跑一些算力较大的项目,这时我只需要远程打开我的主机服务器,然后用MacBook的终端或者vs code等连接到我的主机服务器遍可以进行一些大算力需求的项目开发了。
我这里用到的硬件以及软件说明:

  1. Windows主机+路由器+公网IP
  2. Windows11(提醒一点这里对Windows系统的版本是有要求的,至少要求是Windows 10 build 18917)
  3. 远程终端设备

主机配置

远程启动PC

这里我实现的远程启动主机的办法是:

  1. 通过智能插座来控制主机的电源通断电,注意这里的智能电源需要连接WiFi以方便可以在手机里控制通断电。
  2. 在主板的BIOS里设置通电自动启动,这里可根据不同主板然后去搜索通电自动开机的方法,由于不同品牌的方法不同这里不再赘述,如有问题可以私我。
  3. 在Windows的启动菜单里将终端软件设置为自动启动。

设置DMZ主机

我的宽带是带有公网IP的,我这里是通过网线-路由器-网线-主机连线,然后在Windows上打开powershell(或者cmd)并输入:

ipconfig

在下面找到你的Windows主机的子网地址如下图:
ipconfig
然后打开路由器,在里面找到DMZ主机的功能,将其ip改为你的主机ip。这里可以理解为在远程访问公网ip的指定端口可以直接访问到主机的ip指定端口。

下载WSL

提醒一点这里对Windows系统的版本是有要求的,至少要求是Windows 10 build 18917,可以win+R输入winver来查看你的Windows版本是否支持。win+R

winver
这里我推荐这篇WSL安装教程,如果有什么问题欢迎留言。
我这里安装的是WSL2+Ubuntu20.04

设置WSL为终端默认Shell和SSH自动启动

上面已经设置好了在Windows上的终端开机自动启动,现在在终端的设置里将Ubuntu20.04设置为默认Shell:Default Shell

然后打开Ubuntu之后,输入:

vim ~/.zshrc

或者如果你是bash的话输入:

vim ~/.bashrc

打开后会出现如下编辑器界面:.zshrc
按”Shift“和g跳转到最后一行,然后按o进入编辑模式,然后输入以下指令:

#启动时自动启动ssh服务
sudo service ssh start

然后按“Esc”键,输入":"+“w”+“q”,保存并退出,然后继续在zsh里输入:

source ~/.zshrc

到这里SSH的自动启动就结束了。

设置Windows和Ubuntu中SSH的端口转发

由于我只想开放Ubuntu的SSH的端口,从安全角度考虑不用默认的22端口,我就将Ubuntu的SSH设置为2222。
首先修改SSH的默认端口,在WSL中输入:

vim /etc/ssh/sshd_config

然后将其中的Port这一行的22端口修改为自己喜欢的端口,我这里使用的是2222:
sshd_config

接下来WSL中输入:

ifconfig

可以看到如下:
ifconfig
找到eth0里的inet,这个172.26.37.34就是我的WSL的本地地址,我们现在就是要将端口转发到主机PC上面去。
接下来在Windows里使用管理员身份打开powershell,并在里面输入以下代码,将其中的connectaddress改为自己WSL的本地地址即可:

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.26.37.34 connectport=2222

接下来要在防火墙里开放该端口,继续使用管理员身份打开powershell并输入:

netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2222

请注意:若重新关闭防火墙再开启防火墙应重新开放端口并重启路由器(原因未知,如有知道的朋友欢迎私信我,感谢)
到这里,主机上的配置已经基本结束了,接下来就是如何使用移动终端设备连接主机服务器了。

笔记本电脑连接服务器

在笔记本上打开一个代码编辑器或者终端,这里是Visual Studio Code,在左边栏里找到远程(Remote Explorer),然后在SSH里选择“+”,然后在这里按照格式输入你的用户名、IP地址和端口号:

ssh <USER_NAME>@<IP> -p <PORT>

connect-ssh
输入完成后按“Enter”,输入你的密码,然后就可以享受远程开发的便捷了!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows+WSL2+SSH实现远程办公 的相关文章

  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • 如何在Windows 8上正确使用SCardGetStatusChange?

    智能卡服务在 Windows 8 上的行为有所不同 并且 MSDN 尚未更新其文档 任何人都可以提供有关如何正确调用 SCardGetStatusChange 来监视 Windows 8 上的智能卡操作的代码片段吗 提前致谢 这是我为个人博
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • 将文件夹中的所有文件及其所有子文件夹移动到一个大文件夹中 - windows xp

    我有一个文件夹 c downloads ffme 里面有很多子文件夹 每个子文件夹中都有不同数量的文件 我想将所有这些单独的文件合并到一个大文件夹中 同时将它们从子文件夹中删除 我希望最终得到一个包含大量文件的文件夹 但没有子文件夹 我怎样
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr
  • 串行 I/O 与 Windows/Windows CE 重叠/不重叠

    抱歉 这不是一个大问题 但更多的是帮助那些在这些特定问题上遇到问题的人 我正在解决的问题需要使用串行 I O 但主要在 Windows CE 6 0 下运行 然而 最近有人问我该应用程序是否也可以在 Windows 下运行 所以我开始着手解
  • Windows批处理文件:将结构转换为单行字符串

    我需要将这个艰巨的任务作为批处理文件来完成 这对于 C 来说不是最困难的 但在 DOS 中是一个地狱 至少对我来说 我需要将结构转换为单个 var 字符串 才能在我的程序中再次将它们转换为该结构 别担心回归 一切都已经完成了 该结构的大小会
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • Windows 上的 ffmpeg-android ndk

    我正在尝试编译 bash 文件 带有 android ndk 的 ffmpeg 我收到如下错误 arm linux androideabi gcc 无法创建可执行文件 C 编译器测试失败 Makefile 2 config mak 没有这样
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove
  • 如何以管理员身份在 rake 任务中运行 shell 命令?

    我有一个简短的 cmd 文件 我想将其作为部署过程的一部分运行 不幸的是 cmd 文件需要管理员权限 是否可以从 rake 中获得管理员权限 或者我是否需要以管理员身份启动 shell 您可以尝试runas http ss64 com nt
  • Windows:使用 CMD(或 Java)从非特权运行特权命令

    我将有一个以管理员身份运行并侦听端口的服务 我的 GUI 程序将与管理员服务对话以获取需要管理员权限的项目 如果该服务尚未运行 我需要启动它 如何让我的 GUI 程序以管理员身份运行命令 我假设用户会被询问是否要继续 我希望我可以在 CMD
  • 使用 Visual C++ 在桌面上绘图

    我正在编写一个 opencv 应用程序 使用 Visual Studio VC 控制台应用程序使用激光束进行绘图 我想在桌面上画线 我知道绘图功能在 GDI32 dll 中可用 但对如何将 GDI32 dll 与我的 vc 代码集成感到困惑
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo

随机推荐

  • R语言-ggplot2柱状堆叠图

    导入数据 load D R futures user 2 dat 提取需要画图的数据 a futures user 2 c 1 2 5 对部分错误的数据进行修改 a province which a province 广西桂林 lt 广西
  • Node 16版本和 node-sass 兼容性问题

    我电脑上的node版本是16 13 1 运行刚克隆下来的项目时 npm install 报错 gyp err 百度之后确定是node sass版本兼容性问题 项目的package json文件版本如下 devDependencies nod
  • str.charAt(i);的作用

    在java中 有 String str leetcode 则 str charAt 0 为 l str charAt 1 为 e str charAt 2 为 e
  • 拉格朗日插值

    直接上公式 简单的讲 这个玩意就是在给你若干个 f xi yi 的结果 算出f k 的结果 最朴素的实现方法 验证下这个公式的结果 include
  • 【利用Python module计算程序运算时间】

    本文简介如何利用Python module来计算程序运算时间 内容概览 为什么要计算程序的运行时间 方法一 time module 方法二 timeit module 为什么要计算程序的运行时间 编写程序时 为了比较各种算法或优化算法 需要
  • Typescript 装饰器和反射

    装饰器 装饰器 也叫注解 对一个类 方法 属性 参数的装饰 它是对这一系列代码的增强 并且通过自身描述了被装饰的代码可能存在行为改变 装饰器是一种特殊类型的声明 它能够被附加到类声明 方法 访问符 属性或参数上 装饰器使用 expressi
  • 一篇博文教你SpringMVC中JSON注解&异常处理的使用

    目录 一 JSON数据返回 1 2 Jackson的介绍 1 3 3 案例演示 二 异常处理 2 4 1 异常处理方式 2 4 2 异常处理方式 2 4 3 异常处理方式 一 JSON数据返回 1 1 1 2 Jackson的介绍 1 2
  • steam创客教育

    社会竞争日益激烈 为了让子女将来能 成龙成凤 父母们都非常重视孩子的教育 格物斯坦小坦克看到这样普遍的现象 为了让自己的孩子不输在起跑线上 在各种各样兴趣班盛行的当下 很多家长常常盲目跟风 看到别的孩子学着还不错或升学考试需要 也给自己孩子
  • oracle中sqlload,oracle----sqlldr用法(转)

    SQL LOADER是ORACLE的数据加载工具 通常用来将操作系统文件迁移到ORACLE数据库中 SQL LOADER是大型数据 仓库选择使用的加载方法 因为它提供了最快速的途径 DIRECT PARALLEL 现在 我们抛开其理论不谈
  • elasticsearch 2.3.4 java API 连接,ik分词器,设置集群节点,创建index,mapping的几种方式...

    1 默认集群连接 Client client TransportClient builder build addTransportAddress new InetSocketTransportAddress InetAddress getB
  • mybatis的熟练运用以及反射知识讲解

    JSP常用设计模式MVC模式 Mybatis mybatis的使用 我们在写项目的时候必定要写DAO 写DAO的时候不难发现对每张表的DAO都差不多 只是sql语句不同 DAO中的每个方法其实也差不多 所以直接用JDBC写DAO是在太麻烦
  • Linux系统(二)——Linux环境下的开发工具

    接着上一篇博客 把Linux环境下常用的vim编辑器 gcc工具链 makefile和gdb等工具的使用理一理 一 vim编辑器 1 工作模式 vim是Linux常用文本编辑器 vim有两种基本工作模式 命令模式 输入的字符作为命令使用 不
  • 华为OD机试 - 表达式括号匹配(Java)

    题目描述 1 2 3 3 8 0 1 2 这是一个简单的数学表达式 今天不是计算它的值 而是比较它的括号匹配是否正确 前面这个式子可以简化为 这样的括号我们认为它是匹配正确的 而 这样的我们就说他是错误的 注意括号里面的表达式可能是错的 也
  • c++ 使用类模板时类声明和类方法定义分开导致`undefined reference to` 错误的一种解决方法

    文章目录 1 问题描述 2 问题分析 3 解决方案 1 问题描述 在编写c 代码时使用到了类模板 并且将类的声明与类方法的定义分别放到了两个文件中 fun h与fun cpp 结果编译时报错 error undefined referenc
  • Flutter实现发送Http请求获取后端接口数据以及如何工程化封装返回数据

    当我们在开发Flutter的时候 肯定会和后端接口对接去请求后端的数据 那么本次我们将 讲解Flutter如何请求数据 以及如何封装返回结果 话不多说直接上代码 首先根据Flutter官方网站的描述 需要在pubspec yaml引入一个h
  • 马上:Android pins 模块化架构

    马上 Android pins 模块化架构 主工程的代码堆积 造成包目录结构臃肿 难区分 借用pins工程结构暂时 其相互独立的代码进行区分 为后期模块组件化 留下了灵活性 pins 原理是gradle sourceSets sourceS
  • Visual Studio连接Linux服务器编译CMake项目,生成在Linux上运行的程序

    本文基于的开发环境说明 window系统 Windows 10 企业版 64位操作系统 Linux系统 BigCloud Enterprise Linux 7 8 Core Visual Studio Microsoft Visual St
  • eclipse中设置jsp文件的默认编码格式为utf-8

    eclipse中设置jsp文件的默认编码格式为utf 8 我们在创建jsp文件时 经常遇到生成的jsp文件中的编码格式默认为iso 8859 1 这样的编码由于不支持中文 所以我们需要手动把它改为utf 8编码 这样会浪费我们很多时间 所以
  • 神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一

    神经网络学习小记录74 Pytorch 设置随机种子Seed来保证训练结果唯一 学习前言 为什么每次训练结果不同 什么是随机种子 训练中设置随机种子 学习前言 好多同学每次训练结果不同 最大的指标可能会差到3 4 这样 这是因为随机种子没有
  • Windows+WSL2+SSH实现远程办公

    Windows11 WSL SSH实现远程办公 Windows11 WSL2 SSH实现远程办公 主机配置 远程启动PC 设置DMZ主机 下载WSL 设置WSL为终端默认Shell和SSH自动启动 设置Windows和Ubuntu中SSH的