• 远程连接服务器上搭建jupyter notebook


    前段时间趁着阿里云搞活动白嫖了3年的ECS服务器,拿来玩儿玩儿Python

    1. 搭建环境

    系统为阿里云ECS服务器 Ubuntu 20.04 64位

    在服务器中下载一个anconda,然后Anconada中创建一个虚拟环境,单独测试:

    conda create -n notebook_py37 python=3.7
    
    • 1

    安装jupyter notebook:

    conda install jupyter notebook
    
    • 1

    2. 生成配置文件

    jupyter notebook --generate-config
    
    • 1

    生成的配置文件为~/.jupyter/jupyter_notebook_config.py

    3. 设置登录密码

    生成密码有两种方式:

    • 自动生成
      jupyter notebook 5.0 版本开始可以使用jupyter notebook password来自动生成密码
    jupyter notebook password
    Enter password:  密码
    Verify password: 密码
    [NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json
    
    • 1
    • 2
    • 3
    • 4

    生成的加密密码存储在 jupyter_notebook_config.json中

    • 手动生成
      也可以手动生成密码,打开 ipython 执行下面内容:
    In [1]: from notebook.auth import passwd
    In [2]: passwd()
    Enter password: 密码
    Verify password: 密码
    Out[2]: 'sha1:....'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sha1:.... 即生成的加密密码,后续需要添加到jupyter_notebook_config.py 中去

    注意:这里我们输入的密码和生成的加密密码都要记住,密码负责登录jupyter notebook,加密密码需要添加到jupyter_notebook_config.py

    4. 修改配置文件

    在 jupyter_notebook_config.py 中找到下面的行,取消注释并修改。(也可以直接把下面的复制到文件末尾进行修改)

    c.NotebookApp.ip='*' # 或者 c.NotebookApp.ip='0.0.0.0'
    c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口
    
    • 1
    • 2
    • 3
    • 4

    5. 运行

    以上设置完以后就可以在服务器上启动 jupyter notebook

    几种运行方式

    jupyter notebook # 五参数启动
    jupyter notebook --no-browser --port=8005 # 也可以指定端口等信息
    jupyter notebook --allow-root # root 用户
    nohup jupyter notebook&	# 在服务器端一直运行,即使terminal断开 
    
    • 1
    • 2
    • 3
    • 4

    若想关闭ssh连接时不关闭进程,有多种方法:

    使用nohub:nohup jupyter notebook& 使用htop 查看nohub进行,使用 kill -9 PID关闭进程。

    使用screen:启动screen -> 启动你的程序 这时候关闭ssh,会发现程序进程还在

    (还要注意的是不能在隐藏目录 (以 . 开头的目录)下启动 jupyter notebook, 否则无法正常访问文件。)

    参考:https://zhuanlan.zhihu.com/p/335741034

    接着打开 IP:指定的端口, 输入密码就可以访问了。

    对于阿里云:

    查看阿里云服务器公网IP:阿里云

    接下来需要配置一下端口,否则阿里云服务器可能会拒绝访问

    配置:安全组 -> 配置规则 -> 手动添加规则,配置端口(我的jupyter notebook端口选的8888,所以这里配置端口范围为8880~8890)

    在这里插入图片描述

    然后浏览器输入:

    serverIP:8888
    
    • 1

    输入密码,即可进入jupyter

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23ntG3od-1659950037902)(玩转阿里云.assets/image-20220808113023751.png)]

    如果本地有shell,且不想每次都输入服务器IP,也可以使用端口映射,使用localhost登录:

     ssh -L 1234:127.0.0.1:8888 username@hostname
     # 或者
     ssh username@hostname -L 1234:127.0.0.1:8888
    
    • 1
    • 2
    • 3

    该方法不需要在阿里云服务器配置。

    在浏览器输入http://localhost:1234/,然后输入密码即可

    问题

    输入139.196.232.116:8888显示无响应

    尝试在地址栏输入:http://你服务器的IP:8888(可能是因为地址栏默认采用https造成的)
    在服务器终端输入:sudo ufw status查看防火墙状态(可能是因为开启了防火墙),若显示:Status: inactive则表明防火墙关闭,否则输入命令:sudo ufw disable关闭防火墙(这样我们才可以简单的通过浏览器访问Jupyter Notebook服务器,否则需要设置ssh隧道,较为麻烦,不过如果为了安全也可以设置ssh隧道)
    如果还是无响应,可以选择打开本地的terminal,使用端口映射将远程服务器端口映射到本地端口,可解决。

    关于端口映射

    关于端口映射:

    ssh可以很方便的实现从本地端口到远程端口的映射,通常情况下使用 -L 或者 -R参数,例如:

    ssh xxx@xxx.xxx -L 8023:RemoteIP:23
    -L 将本地的某个端口映射到远程主机的某个端口上,上例中就是将本地的8023端口映射到远程主机的23号端口上,这样就可以直接telnet本机的8023端口来访问远程主机了。

    但是需要说明的是RemoteIP可以是127.0.0.1,此时127.0.0.1指的是远程计算机,而非本机地址。

    -R 则正好与-L相反,它将远程主机的某个端口映射到本地的某个端口上,例如:

    ssh xxx@xxx.xxx -R 8023:LocalIP:23
    上例将远程主机的8023端口映射到本机的23号端口,这样远程主机就可以telnet 自己的8023端口来访问本地主机了。

    端口映射:彻底搞懂SSH端口转发命令

    ssh本地端口转发命令的「-L」旗标后可以填写四个参数,完整格式为:

    ssh -L [收听接口:]收听端口:目标主机:目标端口 username@hostname
    
    • 1

    命令中方括号内的部分,即第一个参数可以不写;它的默认值一般是0.0.0.0(OpenSSH客户端配置文件「ssh_config」中「GatewayPorts」选项的值一般为「yes」),意味着SSH隧道会收听所有接口,接受来自任何地址的应用访问请求并进行转发。而如果在此处填写了绑定地址(bind address),SSH隧道连接就会只处理来自绑定地址的应用请求,而对其他地址发来的请求置之不理;如同在(真实世界的)隧道入口设立哨卡,只对白名单牌号的车辆放行。例如在此处填写127.0.0.1,即可实现只有来自主机A本机的应用请求才被SSH隧道转发的效果。

    需留意,收听接口是站在主机A的视角上去规定允许与A连接的设备,解决「能够使用SSH端口转发的应用请求从何处来」的问题,类似防火墙的入站;收听端口则依旧是主机A上的那个端口X,不能够跑到别的主机上去。

    类似地,远程端口转发和动态端口转发也具有「收听接口」这一可不指明的参数下文不再赘述。从安全或控制流量的角度,规定绑定地址是一项实用的功能。

  • 相关阅读:
    dpi是什么意思
    (※)力扣刷题-字符串-实现 strStr()(KMP算法)
    【Pod】
    Spring中如何避免循环依赖
    聚观早报 | 奈雪成乐乐茶第一大股东;达达与抖音达成战略合作
    传递事件流
    redis安装包
    LeetCode 48题: 旋转图像
    【校招VIP】前端专业课考点之可靠传输协议
    YoloV8 +可视化界面+GUI+交互式界面目标检测与跟踪
  • 原文地址:https://blog.csdn.net/weixin_44456692/article/details/126231753