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

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

1. 搭建环境

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

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

conda create -n notebook_py37 python=3.7

安装jupyter notebook:

conda install jupyter notebook

2. 生成配置文件

jupyter notebook --generate-config

生成的配置文件为~/.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

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

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

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 #可自行指定一个端口, 访问时使用该端口

5. 运行

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

几种运行方式

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

若想关闭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

输入密码,即可进入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

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

在浏览器输入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

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

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

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

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值