環(huán)境信息
? wsl2 中l(wèi)inux版本:ubuntu
? windows版本: win10/win11
問題描述
最近裝了wsl2,使用vscode遠(yuǎn)程連接wsl2時遇到了如下問題:
1、wsl2的ip無法固定
2、wsl2的ssh服務(wù)不能自動開啟。
嘗試了網(wǎng)上許多方法,都不能解決,于是決定自己寫python腳本解決。
如下方案可以自動將wsl2的ip同步到vscode remote ssh的config文件中,同時自動開啟wsl2中的ssh服務(wù)。
不算很完美的方案,但至少每次開機不用手動開啟wsl2中ubuntu的ssh服務(wù),不需要設(shè)置vscode中remote ssh的config文件中ip地址了,還算比較方便。
方案概覽
wsl2的bash開啟時自動執(zhí)行python腳本,將ubuntu中最新的ip寫入vscode的remote ssh的config文件中。
每次打開一個bash,都會同步一次。
注意事項
1、remote ssh 的config文件中wsl2遠(yuǎn)程連接的配置中的ip地址必須在第二行,且HostName前是四個空格。如下圖所示
2、每次打開一個wsl2中的ubuntu終端,都會自動同步一次。
3、將ubuntu終端設(shè)為windows開機默認(rèn)打開。(必須主動打開ubuntu 終端,才會自動同步)
4、直接在wsl2的ubuntu訪問、修改windows中的vscode remote ssh的config。windows的盤符都掛載在/mnt下。
需要解決如下幾個問題。
1、需要在wsl2中ubuntu設(shè)置普通用戶sudo時 免密登錄。
比如 sudo service ssh start
時,不需要輸入密碼
2、wsl2中的ubuntu需要安裝python3
sudo apt install python3
好吧,下面正式開始操作!
wsl2設(shè)置普通用戶sudo時免密
由于wsl2腳本中使用sudo命令,如果需要輸入密碼的話,很不方便,所以需要先設(shè)置sudo 免密,
ubuntu普通用戶設(shè)置sudo免密
設(shè)置ubuntu終端開啟時自動運行wsl2同步ip腳本
-
vim ~/.bashrc
-
在最下方加上
python3 ~/.my_init_sh/WSL_IP_UBUNTU.py -
cd ~ && mkdir .my_init_sh
-
cd .my_init_sh
-
在.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一次。文章來源:http://www.zghlxwxcb.cn/news/detail-437016.html
驗證
在powershell中使用 wsl --shutdown,關(guān)閉ubuntu,然后新打開一個ubuntu bash,就自動同步了。文章來源地址http://www.zghlxwxcb.cn/news/detail-437016.html
到了這里,關(guān)于wsl2 ubuntu ip 自動同步到windows端的vscode remote ssh(wsl2 ubuntu 靜態(tài)ip 固定ip)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!