wsl2 ubuntu ip 自动同步到windows端的vscode remote ssh(wsl2 ubuntu 静态ip 固定ip)

news2024/11/17 7:20:42

环境信息

​ wsl2 中linux版本:ubuntu

​ windows版本: win10/win11

问题描述

最近装了wsl2,使用vscode远程连接wsl2时遇到了如下问题:
1、wsl2的ip无法固定
2、wsl2的ssh服务不能自动开启。

尝试了网上许多方法,都不能解决,于是决定自己写python脚本解决。

如下方案可以自动将wsl2的ip同步到vscode remote ssh的config文件中,同时自动开启wsl2中的ssh服务。

不算很完美的方案,但至少每次开机不用手动开启wsl2中ubuntu的ssh服务,不需要设置vscode中remote ssh的config文件中ip地址了,还算比较方便。

方案概览

wsl2的bash开启时自动执行python脚本,将ubuntu中最新的ip写入vscode的remote ssh的config文件中。

每次打开一个bash,都会同步一次。

注意事项

1、remote ssh 的config文件中wsl2远程连接的配置中的ip地址必须在第二行,且HostName前是四个空格。如下图所示

2、每次打开一个wsl2中的ubuntu终端,都会自动同步一次。
3、将ubuntu终端设为windows开机默认打开。(必须主动打开ubuntu 终端,才会自动同步)

4、直接在wsl2的ubuntu访问、修改windows中的vscode remote ssh的config。windows的盘符都挂载在/mnt下。

需要解决如下几个问题。

1、需要在wsl2中ubuntu设置普通用户sudo时 免密登录。
比如 sudo service ssh start 时,不需要输入密码
2、wsl2中的ubuntu需要安装python3

sudo apt install python3

好吧,下面正式开始操作!

wsl2设置普通用户sudo时免密

由于wsl2脚本中使用sudo命令,如果需要输入密码的话,很不方便,所以需要先设置sudo 免密,

ubuntu普通用户设置sudo免密

设置ubuntu终端开启时自动运行wsl2同步ip脚本

  1. vim ~/.bashrc

  2. 在最下方加上
    python3 ~/.my_init_sh/WSL_IP_UBUNTU.py

  3. cd ~ && mkdir .my_init_sh

  4. cd .my_init_sh

  5. 在.my_init_sh目录下放置如下python脚本(WSL_IP_UBUNTU.py)

    注意: 如下脚本只需要修改config文件目录,详情看注释。

# WSL_IP_UBUNTU.py
import os
import re

# 请修改这行!仅仅需要修改这行!    改为您的config文件目录
config_file = "/mnt/c/Users/82383/.ssh/config"

def writefile(content):
    f = open(config_file,"w")
    for line in content:
        f.write(line)
    f.close()

def command(command):
    f = os.popen(command)
    lines = f.readlines()
    return lines

def get_config():
    f = open(config_file,"r")
    lines = f.readlines()
    strip_line = lines[1].strip()
    split_list = strip_line.split()
    ubuntu_ip = split_list[1]
    print("origin config ip = ", ubuntu_ip)
    return  lines

def get_ubuntu_ip():
    lines = command("ifconfig")
    strip_line = lines[1].strip()
    split_list = strip_line.split()
    print("now ubuntu ip    = ", split_list[1])
    return split_list[1]
   
def is_ok(lines):
    for line in lines:
        if re.findall("done", line):
            return True
    return False

def start_ssh():
    lines = command("ps -e | grep sshd")
    if len(lines) == 0:
        ret_lines = command("sudo service ssh start")
        if is_ok(ret_lines):
            print("sshd start success!")
            return True
    elif len(lines) >= 1:
        print("sshd is running!")
        return True
    
    print("sshd start failed!")
    return False
    
def sync_ip():
    ubuntu_ip = get_ubuntu_ip()
    lines = get_config()
    lines[1] = "    HostName {}\n".format(ubuntu_ip)
    writefile(lines)
    print("set vscode remote ssh config ip successfully [{}]".format(config_file))
    

if __name__ == '__main__':
    print("---------------start sync ip!------------------")
    ret = start_ssh()
    if ret:
        sync_ip()
    print("---------------end sync ip!--------------------")


到此,每次开启一个ubuntu bash,都会自动同步ip一次。

验证

在powershell中使用 wsl --shutdown,关闭ubuntu,然后新打开一个ubuntu bash,就自动同步了。
在这里插入图片描述

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

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

相关文章

Vue核心 Vue生命周期

1.18. Vue生命周期 1.18.1. 引出生命周期 生命周期 又名生命周期回调函数、生命周期函数、生命周期钩子是什么: Vue在关键时刻帮我们调用的一些特殊名称的函数。生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。生命周期函数中的this指向是…

JUC并发编程与源码分析笔记13-AbstractQueuedSynchronizer之AQS

前置知识 公平锁和非公平锁可重入锁自旋思想LockSupport数据结构之双向链表设计模式之模板设计模式 AQS入门级别理论知识 是什么 AbstractQueuedSynchronizer:抽象的队列同步器。 用来实现锁或其他同步器组件的公共基础部分的抽象实现,是重量级基础框…

Hive知识回顾2

一、分桶表 1.1分桶表的概念 分桶表也叫做桶表,源自建表语法中bucket单词。是一种用于优化查询而设计的表类型。该功能可以让数据分解为若干个部分易于管理。 在分桶时,我们要指定根据哪个字段将数据分为几桶(几个部分)。默认规则…

人脸识别中的深度学习

深度学习在人脸识别中的应用 人脸识别的过程包括: 人脸检测人脸对齐特征提取(在数学上,实质上是:空间变换)特征度量 其中,特征提取与度量,是人脸识别问题中的关键问题,也是相关研究…

使用 ChatGPT 辅助学习——为自己找一个老师

我们每个人都有许多标签,例如高中生、成绩中等、文科,根据这些标签我和其他拥有相同标签的人分配了相同的教程、班级和老师,这可以带来效率上的提升,因为同一份教程、老师就可以服务几十上百人,而无须为每个人定制&…

软件测试工程师的核心竞争力究竟是什么?

对于测试员而言,了解自己岗位的核心竞争力是非常重要的。在职业初期,许多人认为掌握代码才是软件测试的核心竞争力,但是随着经验的增加,我们会发现真正的核心竞争力是由多个方面组成的。 首先,测试人员需要具备良好的测…

BERT 的面试题

BERT 的简介 1、BERT 是什么?它是用来做什么的? BERT(Bidirectional Encoder Representations from Transformers)是由Google开发的自然语言处理模型,是一种预训练模型,可以用于多种自然语言处理任务&…

【python自动化脚本—实现excel参数化循环调用判定结果】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、需求背景二、我要做什么三、已有接口四、脚本实现五、实现效果图 前言 为提升自己的python能力,记录在工作中实现的自动化脚本,温故…

51单片机(七)定时器

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

写文章的软件-一款写作文章的软件

写文章的软件 写文章的软件是一种工具,可以帮助用户轻松快速地创作高质量的文章。该软件一般包括以下几个主要功能: 写作界面:提供简洁、美观的写作界面,让用户专注于文章创作,同时可以进行排版、字体、颜色等调整。 …

力扣707. 设计链表

707. 设计链表 - 力扣(Leetcode) class MyLinkedList { public:// 定义链表节点结构体struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};// 初始化链表MyLinkedList() {_dummyHead new LinkedNode(0); // …

BasicVSR++代码解读(分模块介绍-前向传播函数)

一、前向传播函数def forward(self, lqs): 输入:低质量序列L,shape为**(n, t, c, h, w)。 输出:HR序列,shape为(n, t, c, 4h, 4w)**。 (1)读取输入数据的维度大小     这里的n,t,c,h,w分别表示:一个bitch的图片数…

数据结构之双向链表,实现双向链表的增删改查

目录 一、双向链表的定义 1.双向链表节点的定义 2.双向链表的初始化 二、双向链表的函数接口实现 1.双链表的尾插 2.双向链表的尾删 3.双向链表的头插 4.双向链表的头删 6.双向链表在pos前面插入 7.双向链表删除pos位置的节点 8.双向链表的销毁 总结 一、双向链表的定义 双向链…

PyQt5桌面应用开发(11):摸鱼也要讲基本法,两个字,16

本文目录 PyQt5桌面应用系列鼠标不要钱,手腕还不要钱吗?PyQt5源程序python文件资源定义界面定义文件 技术要素资源文件StyleSheetsQMainWindow设置窗体几何 结论 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQ…

EC6110-Hi3798MV310-当贝纯净桌面-卡刷强刷固件包

EC6110-Hi3798MV310-当贝纯净桌面-卡刷强刷固件包-内有教程及短接点 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件&a…

【信息安全案例】——网络攻击分析(学习笔记)

📖 前言:随着信息技术的发展,网络空间的斗争可谓是兵家必争之地,网络攻击的事件层出不穷。道高一尺魔高一丈,了解常见的网络攻击类型有利于我们日后工作生活的安全稳定。 目录 🕒 1. 网络攻击威胁&#x1f…

CM211-2-YS-Hi3798MV300/MV310-当贝纯净桌面线刷固件包(可救砖)

CM211-2-YS-Hi3798MV300/MV310-当贝纯净桌面线刷固件包(可救砖)-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用&…

05- 算法解读 R-CNN (目标检测)

要点: R-CNN可以说是利用深度学习进行目标检测的开山之作。 一 R-CNN算法 R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次 在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。 RCNN算法流程可分为4个步…

ACM输入输出

写在前面 主要记录一下ACM输入输出的写法&#xff1b; 一、输入数值 1. 给定N的定长多行输入 题目&#xff1a;https://ac.nowcoder.com/acm/contest/5657/B&#xff1b; 代码&#xff1a; #include <iostream> #include <stdio.h> using namespace std;int m…