![Как создать соединение SecureCRT для подключения к WSL2, не меняя каждый раз IP-адрес?](https://rvso.com/image/1654786/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20SecureCRT%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20WSL2%2C%20%D0%BD%D0%B5%20%D0%BC%D0%B5%D0%BD%D1%8F%D1%8F%20%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9%20%D1%80%D0%B0%D0%B7%20IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%3F.png)
Есть ли способ сделать IP WSL2 статическим? Я читал об этом, и мне сказали, что нет способа сделать IP статическим, тогда есть ли способ сделать соединение SecureCRT с WSL2 без необходимости менять IP-адрес в конфигурациях, чтобы мне не приходилось каждый раз вводить IP заново?
решение1
Решение, чтобы не переделывать все заново с новым IP-адресом, можно найти в посте
Режим моста WSL 2 NIC #4150.
К сожалению, решение заключается только в том, чтобы поручить эту работу скрипту, который будет запускаться автоматически после каждого входа в систему.
Описание проблемы:
Обходной путь — переадресация портов TCP служб WSL 2 на хостовую ОС.
Виртуальный адаптер на машине WSL 2 меняет свой IP-адрес во время перезагрузки, что затрудняет реализацию решения с однократным запуском.
Также, заметьте, брандмауэр Windows заблокирует перенаправленный порт.
Решение — написать скрипт PowerShell, который выполняет следующие действия:
- Получить IP-адрес машины WSL 2
- Удалить предыдущие правила переадресации портов
- Добавить правила переадресации портов
- Удалить ранее добавленные правила брандмауэра
- Добавить новые правила брандмауэра
Скрипт также удаляет нежелательные правила брандмауэра.
Вот скрипт, скопированный из того поста:
$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
Если вам просто нужно ssh
соединение/протокол для SecureCRT, о котором вы указывали в комментариях, то есть альтернатива переадресации портов:
- Установить сервер Windows OpenSSH (направленияработает на порту 22.
- Установите порт WSL2 sshd на что-то другое (например, 2222) в
/etc/ssh/sshd_config
- Используйте хост Windows в качестве jumphost, воспользовавшись
localhost
переадресацией портов WSL2. То естьssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost
(замените «windowshost» на имя вашей машины).
Это работает, поскольку по умолчанию Windows обнаруживает службы, работающие в экземплярах WSL2, и перенаправляет localhost
им соединения.
Конечно, это предполагает, что SecureCRT может использовать ProxyCommand.