![Wie stellt man eine SecureCRT-Verbindung her, um eine Verbindung zu WSL2 herzustellen, ohne jedes Mal die IP ändern zu müssen?](https://rvso.com/image/1654786/Wie%20stellt%20man%20eine%20SecureCRT-Verbindung%20her%2C%20um%20eine%20Verbindung%20zu%20WSL2%20herzustellen%2C%20ohne%20jedes%20Mal%20die%20IP%20%C3%A4ndern%20zu%20m%C3%BCssen%3F.png)
Gibt es eine Möglichkeit, die WSL2-IP statisch zu machen? Ich habe darüber gelesen und mir wurde gesagt, dass es keine Möglichkeit gibt, die IP statisch zu machen. Gibt es dann eine Möglichkeit, eine SecureCRT-Verbindung zu WSL2 herzustellen, ohne die IP-Adresse in den Konfigurationen ändern zu müssen, sodass ich die IP nicht jedes Mal erneut eingeben muss?
Antwort1
Die Lösung um nicht alles nochmal mit neuer IP-Adresse machen zu müssen findet ihr im Beitrag
WSL 2 NIC Bridge-Modus #4150.
Die Lösung besteht leider nur darin, die Arbeit an ein Skript zu delegieren, das nach jedem Login automatisch ausgeführt wird.
Beschreibung des Problems:
Die Problemumgehung besteht darin, die TCP-Ports der WSL 2-Dienste an das Host-Betriebssystem weiterzuleiten.
Der virtuelle Adapter auf dem WSL 2-Rechner ändert seine IP-Adresse beim Neustart, was die Implementierung einer einmaligen Run-Lösung erschwert.
Eine Randbemerkung: Die Windows-Firewall blockiert den umgeleiteten Port.
Die Lösung besteht darin, ein PowerShell-Skript zu schreiben, das Folgendes tut:
- Holen Sie sich die IP-Adresse der WSL 2-Maschine
- Entfernen Sie vorherige Portweiterleitungsregeln
- Portweiterleitungsregeln hinzufügen
- Entfernen Sie zuvor hinzugefügte Firewall-Regeln
- Neue Firewall-Regeln hinzufügen
Das Skript entfernt auch unerwünschte Firewall-Regeln.
Hier ist das Skript, das aus diesem Beitrag kopiert wurde:
$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";
}
Sie müssen die Ausführung des Skripts nach der Anmeldung wie folgt planen:
Gehen Sie zur Suche und suchen Sie nach „Aufgabenplaner“. Klicken Sie im Aktionsmenü rechts auf „Aufgabe erstellen“.
Geben Sie den Namen ein und gehen Sie zur Registerkarte „Trigger“. Erstellen Sie einen neuen Trigger mit einer Startaufgabe beim Anmelden und stellen Sie die Verzögerung auf 10 Sekunden ein.
Gehen Sie zu den Aktionen und fügen Sie das Skript hinzu. Wenn Sie einen Laptop verwenden, gehen Sie zu den Einstellungen und aktivieren Sie „Mit Strom ausführen“.
Antwort2
Wenn Sie nur eine ssh
Verbindung/ein Protokoll für SecureCRT benötigen, was Sie in den Kommentaren angegeben haben, dann gibt es eine Alternative zur Portweiterleitung:
- Installieren Sie den Windows OpenSSH-Server (Richtungenläuft auf Port 22.
- Stellen Sie Ihren WSL2-SSHD-Port auf einen anderen Wert ein (z. B. 2222) in
/etc/ssh/sshd_config
- Verwenden Sie den Windows-Host als Jumphost und nutzen Sie die
localhost
Portweiterleitung von WSL2. D. h.ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost
(ersetzen Sie „windowshost“ durch den Namen Ihres Computers).
Dies funktioniert, weil Windows standardmäßig in WSL2-Instanzen ausgeführte Dienste erkennt und localhost
Verbindungen an sie weiterleitet.
Dies setzt natürlich voraus, dass SecureCRT einen ProxyCommand verwenden kann.