远程访问WSL2 Jupyter笔记本电脑



所以我试图从远程电脑连接到我的jupyter笔记本电脑,因为我自己的电脑没有全局IP,我必须首先连接到本地网络中的另一台电脑(服务器1(,然后ssh连接到我自己的计算机,并在其上运行jupyter(服务器2(,所以它是这样的:

我的笔记本电脑->服务器1->服务器2

当两台服务器都是Linux时,我经常这样做:

在我的笔记本电脑上:ssh -NL 2323:localhost:2323 server1_username@golbalIp

在服务器1上:ssh -NL localhost:2323:localhost:8888 server2_username@localip

在服务器2上:python3 -m jupyterlab --NotebookApp.token='' --NotebookApp.password='' --port 8888

但现在我的服务器2是一台windows pc,我的jupyter在wls2上,所以我想既然在windows的localhost:8888上运行wsl2的jupyer,那么做同样的事情也可以,但它没有,我该怎么解决这个问题?

我发现了为什么我的初始尝试没有成功,所以,wsl有自己的本地IP,通常每次启动它时都会更改。我试图将其设置为静态IP,但即使编辑配置文件也没有成功,因此我们只需要在每次启动服务器2 上的jupyter时检查IP和端口

在服务器2上:

python3 -m jupyterlab --NotebookApp.token='' --NotebookApp.password='' 
--ip $(python3 -c "import subprocess; subprocess>

你会得到这样的输出

[I 2022-05-17 12:25:06.476 ServerApp] nbclassic | extension was successfully loaded.
[I 2022-05-17 12:25:06.476 ServerApp] Serving notebooks from local directory: /mnt/d
[I 2022-05-17 12:25:06.476 ServerApp] Jupyter Server 1.4.1 is running at:
[I 2022-05-17 12:25:06.476 ServerApp] http://172.28.20.187:8888/lab
[I 2022-05-17 12:25:06.476 ServerApp]  or http://127.0.0.1:8888/lab
[I 2022-05-17 12:25:06.476 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

因此,172.28.20.187:8888是Jupyter使用的IP和端口,每次都会发生变化。每隔一步都是一样的。

在服务器1:ssh -NL localhost:<SOME_PORT_U_LIKE, ex:2323>:<IP, ex:172.28.20.187>:<PORT, usually:8888> server2_username@localip

在我的笔记本电脑上:ssh-NL<SOME_PORT_U_LIKE,例如:2323>:localhost:<SOME_PORT_U_LIKE,例如:2323>server1_username@golbalIp

此外,为了避免每次我将wsl 8888端口转发到windows上的其他端口时都找不到该端口,所以现在如果我ssh到我的windows上的那个端口,我可以直接连接到我的jupyter笔记本

我首先允许2322端口通过windows防火墙,然后在我的wsl上启用ssh,每次重新启动我的电脑时都会运行以下命令:

@echo off
setlocal
C:WindowsSystem32bash.exe  -c "sudo /usr/sbin/service ssh start"
C:WindowsSystem32netsh.exe interface portproxy delete v4tov4 listenport=2322 listenaddress=0.0.0.0 protocol=tcp
for /f %%i in ('wsl hostname -I') do set IP=%%i
C:WindowsSystem32netsh.exe interface portproxy add v4tov4 listenport=2322 listenaddress=0.0.0.0 connectport=2322 connectaddress=%IP%
endlocal

这一点并不明显,但解决方案是Windows 10不喜欢端口8888,需要使用8889才能在WSL2上进行端口转发。我花了很长时间才解决这个问题。在原生linux下,端口根本没有问题,除非远程主机有特定的自定义防火墙规则。

所以你必须使用:

ssh -NL 8889:localhost:8888 remote-server-alias

其中远程服务器别名是您在使用JumpProxy的.ssh/config中定义的,并且您还必须在Debian on Windows(WSL2(安装上运行apache2服务器(例如(。首先在浏览器中检查localhost,以确保apache服务器正确运行。

在开始之前,您必须执行以下操作:

ssh remote-server-alias
nohup jupyter notebook --no-browser --port 8888 &

代币将为您存储在nohup.out中。

相关内容

最新更新