如何通过 SecureCRT 连接来连接 WSL2,而不用每次都更换 IP?

如何通过 SecureCRT 连接来连接 WSL2,而不用每次都更换 IP?

有没有办法让 WSL2 ip 静态化?我读过相关内容,有人告诉我没有办法让 IP 静态化,那么有没有办法建立 SecureCRT 到 WSL2 的连接,而不必更改配置中的 IP 地址,这样我就不必每次都重新输入 IP 了?

答案1

解决方案是不再使用新 IP 地址重新执行所有操作,请参阅帖子
WSL 2 NIC 桥接模式 #4150

不幸的是,解决方案只是将工作委托给每次登录后自动运行的脚本。

问题描述:

解决方法是将 WSL 2 服务的 TCP 端口转发到主机操作系统。WSL
2 机器上的虚拟适配器在重启期间会更改其 IP 地址,这使得实施一次运行解决方案变得困难。
另外需要注意的是,Windows 防火墙将阻止重定向端口。

解决方案是编写一个 PowerShell 脚本,其功能如下:

  • 获取 WSL 2 机器的 IP 地址
  • 删除以前的端口转发规则
  • 添加端口转发规则
  • 删除以前添加的防火墙规则
  • 添加新的防火墙规则

该脚本还会删除不需要的防火墙规则。
以下是从该帖子中复制的脚本:

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
  $remoteport = $matches[0];
} else{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]

#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

您需要安排脚本在登录后运行,如下所示:

转到搜索,搜索任务调度程序。在右侧的操作菜单中,单击创建任务。
输入名称,转到触发器选项卡。创建一个新的触发器,在您登录时开始任务,将延迟设置为 10 秒。
转到操作并添加脚本。如果您使用的是笔记本电脑,请转到设置并启用开机运行。

答案2

如果您只需要sshSecureCRT 的连接/协议(您在评论中指出),那么还有一种端口转发的替代方法:

  • 安装 Windows OpenSSH 服务器 (方向在端口 22 上运行。
  • 将 WSL2 sshd 端口设置为其他端口(例如 2222)/etc/ssh/sshd_config
  • 使用 Windows 主机作为跳转主机,利用 WSL2 的localhost端口转发功能。即ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost(用您的机器名称替换“windowshost”)。

这是有效的,因为默认情况下,Windows 会检测在 WSL2 实例中运行的服务并将localhost连接转发给它们。

当然,这假设 SecureCRT 可以使用 ProxyCommand。

相关内容