예전에는 SSH 스크립트를 사용하고 IP를 127.0.0.2로 설정하여 연결할 수 있었지만 이제는 시작할 때마다 더 이상 작동하지 않습니다. 왜 그런지 잘 모르겠습니다. localhost 또는 127.0.0.1을 시도했지만 작동하지 않습니다. localhost에서 웹사이트에 접속할 수 있습니다. WSL2를 호스팅하는 내 컴퓨터에서 SecureCRT를 통해 연결할 수 있는 포트 번호와 IP를 어떻게 얻나요?
try {
## Port forward WSL virtual machine ports to host firewall for remote access
## !! this script must be run as Administrator !!
## powershell -executionpolicy bypass -file "c:\docker\WSL-portproxy.ps1"
## ip -o -4 -f inet addr show eth0 | awk '{ split($4, ip_addr, "/"); print ip_addr[1]; }'
## print out is "4: eth0 inet 172.20.x.x/20 brd ..." string
$remoteport = bash.exe -c "ip -o -4 -f inet addr show eth0";
$remoteport = ($remoteport -split "\s+")[3];
$remoteport = $remoteport.substring(0, $remoteport.LastIndexOf("/"));
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if(!$found){
echo "WSL ip address not found";
exit;
}
echo "WSL ip address $remoteport";
# Port forwards from WSL virtual machine to Win10 host firewall
# Bind a specific host ip addr or use 0.0.0.0 default
$ports=@(2222);
$addr='127.0.0.2';
# Remove firewall exception rules, add inbound and outbound rules
$ports_a = $ports -join ",";
echo "Firewall inbound/outbound rules";
iex "Remove-NetFireWallRule -DisplayName 'WSL Firewall Unlock' ";
iex "New-NetFireWallRule -DisplayName 'WSL Firewall Unlock' -Description 'Remote access to WSL services' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL Firewall Unlock' -Description 'Remote access to WSL services' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
echo "portproxy ${addr}:${port} to ${remoteport}:${port}";
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
# Do your script's stuff
}
catch
{
Write-Error $_.Exception.ToString()
Read-Host -Prompt "The above error occurred. Press Enter to exit."
}
이것을 사용하여 설정할 수 있었지만 더 이상 작동하지 않습니다.
다음 오류가 발생합니다.
C:\Users\admin\Downloads\f.ps1 : System.Management.Automation.RuntimeException: You cannot call a method on a
null-valued expression.
at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception
exception)
at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
At line:1 char:91
+ ... tionPolicy -Scope Process Bypass }; & 'C:\Users\admin\Downloads\f.ps1'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,f.ps1
답변1
WSL2를 호스팅하는 내 컴퓨터에서 SecureCRT를 통해 연결할 수 있는 포트 번호와 IP를 어떻게 얻나요?
아마도 나는 당신의 질문을 크게 오해하고 있지만 이것은해야한다매우 간단하며 스크립트가 전혀 필요하지 않습니다.
연결하는 경우:
- 에서WSL2를 호스팅하는 머신의 SecureCRT
- 에게해당 머신의 WSL2 인스턴스
그런 다음 WSL2는 "localhost 전달"(빌드 18945 이후)이라는 기능을 제공합니다.이 웹사이트.
당신이 사용하고 있는 스크립트는 더 이상 필요하지 않을 뿐만 아니라 몇 년 전에 bash.exe
훨씬 더 유연한 명령으로 대체된 명령을 사용하기 때문에 분명히 매우 오래된 것입니다. wsl.exe
한동안 Microsoft는 bash.exe
"역사적 명령"으로 나열했지만 최신 문서에서는더 이상 사용되지 않는 것으로 표시되어 있습니다..
어쨌든 핵심 질문에 관해서는WSL 문서:
Linux 배포판에서 네트워킹 앱(예: NodeJS 또는 SQL 서버에서 실행되는 앱)을 구축하는 경우 일반적으로 하는 것처럼 localhost를 사용하여 Windows 앱(예: Edge 또는 Chrome 인터넷 브라우저)에서 액세스할 수 있습니다. ).
그러나 이전 버전의 Windows(빌드 18945 이하)를 실행하는 경우 Linux 호스트 VM의 IP 주소를 가져오거나 최신 Windows 버전으로 업데이트해야 합니다.
이는 "앱 구축"뿐만 아니라 SSH와 같은 기존 앱/서비스에도 적용됩니다.
즉, localhost
Windows에서 포트에 연결을 시도할 때 포트가 Windows 자체의 앱/서비스에 의해 바인딩되지 않은 경우 자동으로 WSL2의 해당 포트로 연결을 전달하려고 시도한다는 것입니다(모든 및 모든 인스턴스는 동일한 네트워킹 스택을 공유하기 때문입니다).
따라서 실제로 WSL2 인스턴스가 포트 2222에서 SSH를 실행하고 있다면~해야 한다localhost:2222
추가 노력 없이 SecureCRT에서 에 연결할 수 있습니다 .
여기에는 몇 가지 이유가 있습니다.~ 아니다일하다:
%userprofile%\.wslconfig
다음 과 같은 파일이 있는 경우localhost전달false
명시적으로 (가능성 없음) 으로 설정됨로컬 호스트 전달은 Windows가 최대 절전 모드일 때마다 작동이 중지되는 것으로 알려져 있습니다. 최대 절전 모드는 Windows의 기본값인 "빠른 시작" 옵션에 의해 무의식적으로 실행될 수도 있습니다. 보다스택 오버플로에 대한 내 대답자세한 내용은.
그 외에는 (다시)~해야 한다복잡한 전달 스크립트 없이 작업할 수 있습니다.