云服务器+FRP实现内网穿透,可以远程访问本机的jupyter服务器

avatar
作者
筋斗云
阅读量:3

文章目录


本文利用云服务器+FRP实现内网穿透,可以远程访问本机的jupyter服务器

写这篇博客的初衷是:台式机上有GPU,想可以远程访问台式机的jupyter服务器,从而可以在笔记本上远程使用台式机的GPU来做深度学习

白嫖阿里云云服务器 (高校学生才能领取)

阿里云云工开物计划可以领取300元优惠券,经过实测,可以免费购买轻量应用服务器中的新加坡服务器1年,如下图所示,这里我选择系统镜像为 Ubuntu20.04

请添加图片描述

创建新用户(可跳过)

参考链接 ubuntu下添加新用户

启动云服务器,默认使用admin用户,这里新创建一个用户

sudo useradd -r -m -s /bin/bash your_user_name 

其中参数的意义如下:
-r:建立系统账号
-m:自动建立用户的登入目录
-s:指定用户登入后所使用的shell

在 Ubuntu20.04 中,不会在创建用户的时候自动提示设置密码,需要使用以下命令来设置

sudo passwd your_user_name 

输入 ls /home/ 查看用户是否成功创建,输入 su your_user_name 即可切换用户

云服务器端设置

配置frp服务器

  1. 下载frp并解压,由于云服务器操作系统为 ubuntu20.04,架构为 x86_64,因此选择 frp_0.50.0_linux_amd64
wget https://github.com/fatedier/frp/releases/download/v0.50.0/frp_0.50.0_linux_amd64.tar.gz tar zxvf frp_0.50.0_linux_amd64.tar.gz cd frp_0.50.0_linux_amd64 
  1. 云服务器端只要关注两个文件,即 frpsfrps.ini,我们可以通过修改 frps.ini 来配置功能
vim frps.ini 

将该文件内容按照下面的格式修改

[common] bind_port = 7000 dashboard_port = 7500 token = 12345678 dashboard_user = admin dashboard_user = admin vhost_http_port = 10080 vhost_https_port = 10443 
  1. 端口均可使用默认值(也可以自定义),token、dashboard_user 和 dashboard_user 项请自行设置。
  2. bind_port:表示用于客户端和服务器端连接的端口,这个端口号之后在配置客户端的时候要用到
  3. dashboard_port:是服务器端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中 x.x.x.x 为云服务器的IP)查看frp服务的运行信息
  4. token:是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到
  5. dashboard_user 和 dashboard_pwd 表示打开仪表板页面登录的用户名和密码,自行设置即可
  6. vhost_http_port 和 vhost_https_port 用于反向代理HTTP主机时使用,本文不涉及,因而照抄或者删除这两条均可
  1. 接下来可以运行 frps
./frps -c frps.ini 
  1. 一般来说,服务器默认设有防火墙,需要在防火墙中开放端口 bind_portdashboard_port ,这里为 70007500,如下所示

请添加图片描述

  1. 此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面

请添加图片描述

设置frps开机自启动

Ctrl+C 退出 frps,接下来按照下列步骤将 frps 设置为开机自启动

  1. 修改 rc-local.service 文件

    sudo vim /lib/systemd/system/rc-local.service 

    在文件的最后面添加 [Install] 段的内容,如下所示

    [Unit] Description=/etc/rc.local Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/etc/rc.local After=network.target   [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no   #这一段原文件没有,需要自己添加 [Install] WantedBy=multi-user.target Alias=rc-local.service 
  2. 创建 /etc/rc.local,Ubuntu 20.04 默认不存在 /etc/rc.local,需要自己创建

    sudo vim /etc/rc.local 

    向该文件中添加要执行的命令,如下所示

    #!/bin/bash  # 将你需要执行的命令写在这里,禁止写入死循环命令 frps的绝对路径 -c frps.ini的绝对路径  exit 0 
  3. 修改 /etc/rc.local 权限

    sudo chmod 777 /etc/rc.local 
  4. 启动 rc-local.service

    sudo systemctl enable rc-local.service  
  5. 检查服务状态:使用 sudo systemctl status rc-local.service 查看 rc-local 服务的状态, 显示 loaded 和 enabled 即可

  6. 接下来重启云服务器,访问 x.x.x.x:7500 查看 frps 是否正常运行

客户端配置

因为我需要可以远程访问台式机上的 jupyter,因此台式机就是这里说的客户端。由于台式机上安装了Windows 和 Ubuntu20.04 双系统,因此下面分别按照这两个系统进行示例

Windows

frpc配置

  1. 下载 frp_0.50.0_windows_amd64 并解压,客户端只要关注两个文件,即 frpcfrpc.ini,我们可以通过修改 frpc.ini 来配置功能,如下所示
[common] server_addr = x.x.x.x server_port = 7000 token = 12345678  [smb] type = tcp local_ip = 127.0.0.1 local_port = 445 remote_port = 7001  [jupyter] type = tcp local_ip = 127.0.0.1 local_port = 8888 remote_port = 7002  [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 7003 

[common] 字段下的三项为服务端的设置

server_addr:为服务端IP地址,填入即可

server_port:为服务器端口,填入你设置的端口号即可,如果未改变就是7000

token:是你在服务器上设置的连接口令,原样填入即可

frp 实际使用时,会按照端口号进行对应的转发,原理如下所示

frpc.ini[smb][jupyter][ssh] 字段都是自己定义的规则,自定义端口的格式如下:

[xxx]:表示一个规则名称,自己定义,便于查询即可
type:表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册
local_port:是本地应用的端口号,按照实际应用工作在本机的端口号填写即可
remote_port:是该条规则在服务端开放的端口号,自己填写并记录即可

SMB,Windows文件共享所使用的协议,默认端口号445,协议TCP,因此规则 [smb] 可实现远程文件访问

jupyter 默认工作在端口 8888,因此规则 [jupyter] 可以实现远程访问 jupyter 服务器

  1. 接下来需要在云服务器端配置防火墙,开放 700170027003 这三个端口

  2. 完成配置后,使用命令行运行 frpc.exe 即可,输出如下所示

请添加图片描述

设置frpc自启动

可以通过 Windows 的任务计划程序实现 frpc 开机自启动,具体可以搜索网上教程,关键的一步如下所示

请添加图片描述

SMB测试

确保电脑已经开启共享文件夹,有关教程自行搜索,在手机上安装软件 Solid Explorer (ES文件浏览器应该也可以)来远程访问电脑上的文件

Solid Explorer 中新建云连接,选择连接类型为 LAN/SMB,输入如下信息,远程主机名填云服务器的IP地址,端口填 7001(即上面配置的remote_port)

请添加图片描述

按照流程输入有关信息即可连接

SSH测试

Windows安装SSH可以参考教程:Windows 10 开启ssh服务

VScode上可以安装拓展 Remote - SSH 来远程连接,需要注意的是,输入的命令为 ssh YourUserName@YourServerIP -p 7003

jupyter测试

jupyter 服务器配置

默认情况下 jupyter 不支持密码登录,可以按照下面的步骤开启

  1. 打开 Anaconda Prompt,执行下面的命令来生成一个配置文件,注意记住配置文件路径
jupyter notebook --generate-config 

请添加图片描述

  1. 接下来设置访问密码
jupyter notebook password 

请添加图片描述

  1. 进入上面的 json 文件路径,打开 jupyter_notebook_config.json 配置文件,复制 password 对应的密文

  2. 然后打开上面 jupyter_notebook_config.py 配置文件,添加以下参数后保存

c.NotebookApp.ip='*' #允许访问的IP地址,设置为*代表允许任何客户端访问 c.NotebookApp.password = u'你的密文'#刚才生成密码时上面复制的密文 c.NotebookApp.open_browser = False c.NotebookApp.port = 8888 #可自行指定一个端口, 访问时使用该端口 c.NotebookApp.allow_remote_access = True c.NotebookApp.notebook_dir = 'Your Work Dir' 
  1. 接下来在 Anaconda Prompt 中输入 jupyter notebook 启动 jupyter,或者直接启动 jupyter 也可以

  2. 接下来在其他设备(如笔记本)上输入 x.x.x.x:7002(即云服务器IP地址和上面配置的remote_port),查看是否可以远程访问 jupyter

使用 JupyterLab

Jupyter Lab是Jupyter的一个拓展,它提供了更好的用户体验,例如可以同时在一个浏览器页面打开编辑多个Notebook,Ipython console和terminal终端,并且支持预览和编辑更多种类的文件,如代码文件,Markdown文档,json,yml,csv,各种格式的图片,vega文件(一种使用json定义图表的语言)和geojson(用json表示地理对象),还可以使用Jupyter Lab连接Google Drive等云存储服务,极大得提升了生产力。

  1. 用 conda 安装 JupyterLab

    conda install -cconda-forge jupyterlab # 如果出现类似下面的报错,可以修改 anaconda 安装目录的权限 # EnvironmentNotWritableError: The current user does not have write permissions to the target environment. # environment location: /usr/local/anaconda3 # sudo chown -R YOUR_USER_NAME /usr/local/anaconda3 
  2. 使用浏览器打开 your_jupyter_server/lab/workspaces/auto-a 即可

将 Anaconda 的虚拟环境设置为 jupyter 的 kernel
  1. 使用 Anaconda 创建环境并激活

    conda create -n env_1 python=3.7 conda activate env_1 
  2. env_1 环境下安装 ipykernel

    conda install -n env_1 ipykernel --update-deps --force-reinstall 
  3. 将该环境写入到notebook的kernel中

    python -m ipykernel install --user --name env_1 --display-name "env_1" 

可以通过下面的命令来查看 jupyter 存在的 kernel

jupyter kernelspec list 

如果想删除 env_1 虚拟环境,可通过下面的命令

jupyter kernelspec remove env_1 
VSCode

VSCode 在安装拓展 JupyterJupyter KeymapJupyter Notebook Renderers 后,打开 ipynb 文件后可以选择远程的 jupyter 服务器。

需要注意的是,此时代码运行的工作目录是远程 jupyter 服务器的工作目录,可以通过 !chdir 来查看。所有 ipynb 文件中读取或者保存的数据,都是相对远程 jupyter 服务器的工作目录而言的,而不是本机中 ipynb 文件的目录。

Ubuntu20.04

待续。。。

参考链接

  1. ubuntu下添加新用户
  2. 使用frp配置内网穿透保姆级教程
  3. 【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器_上云后如何解决内网连接问题
  4. frp
  5. 解决Permission denied (publickey)
  6. SSH简介及两种远程登录的方法
  7. JupyterLab最全详解

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!