WSL2 ubuntu ip 自动同步 、静态ip(解决wsl2 ip 每次开机ip会变化的问题)

这篇具有很好参考价值的文章主要介绍了WSL2 ubuntu ip 自动同步 、静态ip(解决wsl2 ip 每次开机ip会变化的问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

找到了更简单的办法,详情wsl2 ubuntu ip 自动同步到windows端的vscode remote ssh(wsl2 ubuntu 静态ip 固定ip)

如下内容仍然可行,不过比较麻烦。
————————————————————————————————————————————————————————

利用python脚本解决wsl2 ip不固定的问题

环境信息

​ 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地址了,还算比较方便。

方案概览

在windows端开机启动一个socket服务器,等待接受wsl2端发来ip。接受到ip后,将ip存储到remote ssh的config中。

wsl2在启动bash时默认开启socket客户端,将自己的ip发往windows端。

注意事项

1、remote ssh 的config文件中wsl2远程连接的配置中的ip地址必须在第二行,且HostName前是四个空格。如下图所示
WSL2 ubuntu ip 自动同步 、静态ip(解决wsl2 ip 每次开机ip会变化的问题)

2、每次打开一个wsl2中的ubuntu终端,都会自动同步一次,前提是windows端的脚本得一直运行着,不要关闭了。

需要解决如下几个问题。

1、需要在wsl2中ubuntu设置普通用户sudo时 免密登录。比如 sudo service ssh start 时,不需要输入密码
2、wsl2端ping不通windows,需要关闭windows防火墙或者设置防火墙规则。
3、windows端python脚本需要开机启动。
4、windows端、wsl2中的ubuntu都需要安装python3

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

开机启动windows端服务器脚本

首先需要在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup中增加一个bat脚本(wsl_ip.bat)

c:
cd C:\Users\82383\my_bat
python WSL_IP_windows.py

脚本解释:

  • c: 进入c盘

  • cd C:\Users\82383\my_bat 进入存放python脚本的目录,该目录可以自己选择,最好放在windows家目录中。

  • python WSL_IP_windows.py 运行windows端服务器脚本

注意 : 如下脚本仅仅需要修改config文件路径,详情请看注释!

# WSL_IP_windows.py

import socket               # 导入 socket 模块

# 如下设置为您的config文件路径即可,注意 \\ 转义字符。您只需要修改这里!
config_file = "C:\\Users\\82383\\.ssh\\config"

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

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

if __name__ == "__main__":
    s = socket.socket()         # 创建 socket 对象
    host = socket.gethostname() # 获取本地主机名
    port = 9999                # 设置端口
    s.bind((host, port))        # 绑定端口
    s.listen(10)                 # 等待客户端连接
    print("开始等待wsl2连接!")
    while True:
        c,addr = s.accept()     # 建立客户端连接
        print("wsl2 set up a link!")
        ubuntu_ip, lines = get_ubuntu_ip()
        print("windows remote ssh config ip = {}".format(ubuntu_ip))
        ret = c.recv(1024).decode('utf-8')
        print('连接地址:{} c : {} \n ubuntu ip =  {}'.format(addr, c, ret))
        if ret != ubuntu_ip:
            lines[1] = "    HostName {}\n".format(ret)
            writefile(lines)
        c.send("sync".encode('utf-8'))
        print("vscode remote ssh: wsl ip set successfully!")

到这里,windows启动时,会默认打开该脚本,建议打开的命令行窗口不要关闭(资源占用极小),让它一直运行。这样的话,wsl2 的ip不管怎么变,都能自动同步。

设置windows防火墙

防火墙开启时,wsl2是ping不通windows的。

防火墙设置办法

实在不行,将windows防火墙全部关闭,先跑通流程再说。

wsl2设置普通用户sudo时免密

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

ubuntu普通用户设置sudo免密

设置ubuntu终端开启时自动运行wsl2客户端脚本

  1. vim ~/.bashrc

  2. 在最下方加上

  3. python3 ~/.my_init_sh/WSL_IP_UBUNTU.py
    
  4. cd ~ && mkdir .my_init_sh

  5. cd .my_init_sh

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

    注意: 如下脚本只需要修改windows的ip,详情看注释。

# WSL_IP_UBUNTU.py

import os
import sys
import re
import socket,time

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

def get_ubuntu_ip():
    lines = command("ifconfig")
    strip_line = lines[1].strip()
    split_list = strip_line.split()
    print(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():
    # 如下ip需要修改为你的windows的固定ip。仅仅需要修改这里。
    ip_port = ('192.168.1.105', 9999)
    s = socket.socket()     # 创建套接字
    s.settimeout(2)

    while True:
        try:
            s.connect(ip_port)      # 连接服务器
        except Exception:
            print("连接windows服务期失败!一秒钟后重试!", flush=True)
            time.sleep(1)
            continue
        break

    print("connect windows success! sync ip ing.....")
    ubuntu_ip = get_ubuntu_ip()
    s.sendall(ubuntu_ip.encode())
    try:
        server_reply = s.recv(1024).decode()
    except Exception:
        print("receive windows msg error!")
        s.close()
        return
    if server_reply == "sync":
        print("sync ip success!")
    else:
        print("windows sync failed!")

    s.close()       # 关闭连接

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

到此,每次打开wsl2的bash终端时,都会运行如上脚本,它会自动将wsl2的ip发往windows端,将ip进行同步。

结尾

现在可以重启电脑试试!

若有问题,欢迎留言,我有空的时候会回复的!

文章来源地址https://www.toymoban.com/news/detail-481681.html

到了这里,关于WSL2 ubuntu ip 自动同步 、静态ip(解决wsl2 ip 每次开机ip会变化的问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【WSL2】在Windows和wsl2中互相网络访问的优雅做法,不用再手动写死IP了

    目前在windows与windows的wsl系统之间,还无法通过相对较固定的方式来互相网络访问,通常需要使用各自的ip来互相访问,而ip可能不是很直观并且可能会有变更,当前教程解决了这个问题,通过hosts映射的方式打通wsl与windows宿主机之间的访问。 脚本的原理:在linux启动时或she

    2024年04月17日
    浏览(35)
  • Windows wsl2安装Ubuntu

    wsl(Windows Subsystem for Linux)即适用于Windows的Linux子系统,是一个实现在Windows 10 / 11上运行原生Linux的技术。 wsl2 为其迭代版本,可以更好的在Windows上运行Linux子系统。 这里以 Windows 11 安装Ubuntu作为示例。 按 Win 键,点击 设置 。 搜索 控制面板 。 点击 程序 。 点击启用或关闭

    2024年02月09日
    浏览(48)
  • WSL2安装Ubuntu及一些问题

    安装wsl2 安装条件 内部版本 19041 及以上 (win10 2004以上或者win11) 查看方法:按 Windows健 + R -- 输入 winver -- 确定 开启虚拟机功能 按 Windows健 + R -- 输入 optionalfeatures -- 确定 重启电脑 设置wsl版本 wsl --set-default-version 2 安装Linux发行版 输入命令 wsl --list --online 后会弹出发行版本 然后

    2024年02月09日
    浏览(42)
  • win11 wsl2 固定ip设置

    记录一次折腾,通过pwsh启动脚本的方式为wsl设置固定ip。 参考了网上的多种方案,组合成一种我喜欢的实现。 windows11 终端Terminal powershell (microsoft store里下载安装) 用于测试,不确定缺少是否影响 wsl的ubuntu 20.04发行版 第一段:设置子网ip变量 第二段:重开wsl 第三段:抄的别

    2024年02月02日
    浏览(67)
  • 解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)

    安装完WSL2后,又安装了Docker,使用了一段时间,发现电脑变卡,进一步查看,发现CPU和内存占用过大,如下图: docker仅仅运行了mysql和zk,在关掉docker后,占用内存仍然很大: 然后关掉wsl后,发现内存下降了。 但是,这种解决方案并不满足我的诉求,我想要的结果是:dock

    2024年02月08日
    浏览(48)
  • WSL2 ubuntu子系统换源

    将原文件做备份: 编辑文件 ubuntu18.04(bionic)配置如下: ubuntu 20.04(focal) 配置如下:

    2024年02月12日
    浏览(54)
  • 在WSL2中安装多个Ubuntu实例

    参考:How to install multiple instances of Ubuntu in WSL2 如果你的系统是 windows 10 2004或更高版本(Build 19041或以上),可以使用以下命令直接在 WSL 中安装最新版本的 Ubuntu 实例: 这将实现所有必需的步骤,比如: 在 Windows 上启用所需的可选组件(Windows Virtualisation Platform 等) 启用 W

    2024年02月05日
    浏览(48)
  • WSL2安装Ubuntu,配置机器学习环境

    WSL全称Windows Subsystem for Linux,适用于Linux的Windows子系统,WSL有WSL1和WSL2两个版本,最新的wsl2已可媲美真实操作系统。 WSL2拥有完整的Linux内核。对于跨OS文件系统的性能,微软也给出了解决办法:可通过将项目文件存储在与处理项目时运行的工具相同的操作系统上进行处理,并

    2024年02月12日
    浏览(45)
  • win10+wsl2+Ubuntu20.2+Pycharm+WSL解释器

    目的:创建一个ubuntu系统下的python解释器,作为win平台下的pycharm的解释器。 这样做的好处是可以直接在win系统里操作文件,相比于linux方便一点,而且也不用对wsl的子系统进行迁移。        1. 设置-Windows更新-windows预览体验计划-加入Dev渠道,安装最新的开发版本windows(Wi

    2024年02月11日
    浏览(48)
  • win11安装ubuntu(by wsl2)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 省吃俭用入手了ThinkPad T14,打算装好Linux后作为开发机器使用,本文记录了安装过程,以便将来在新系统上用到 作为参考,机器软硬件情况如下 接下来就是安装wsl2的过程,并未为了验证Linux是否正常

    2024年02月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包