如何接受来自其他计算机的 ipython 连接?

Posted

技术标签:

【中文标题】如何接受来自其他计算机的 ipython 连接?【英文标题】:How to accept connections for ipython from other computers? 【发布时间】:2012-05-19 07:28:42 【问题描述】:

我在 Ubuntu 12.04 上运行 ipython 0.12.1。您可以通过运行以下命令在浏览器中使用笔记本界面运行它:

ipython notebook --pylab

配置文件可以在~/.config/ipython/profile_default/中找到。似乎每个内核的连接参数都放在~/.config/ipython/profile_default/security/kernel-4e424cf4-ba44-441a-824c-c6bce727e585.json 中。这是该文件的内容(新文件在您启动新内核时创建):


  "stdin_port": 54204, 
  "ip": "127.0.0.1", 
  "hb_port": 58090, 
  "key": "2a105dd9-26c5-40c6-901f-a72254d59876", 
  "shell_port": 52155, 
  "iopub_port": 42228

这是不言自明的,但是如何设置具有永久配置的服务器,以便我可以使用 LAN 中其他计算机的笔记本接口?

【问题讨论】:

你是想使用局域网内其他电脑的notebook,还是直接使用内核(例如打开一个QtConsole共享现有笔记本的内核等) )?答案不一样。 @minrk 我想运行服务器,我可以从局域网中的另一台计算机与浏览器连接并具有笔记本接口,就像我在本地运行命令 ipython notebook --pylab 一样,但在这种情况下我必须在局域网中写下另一台计算机的地址,例如 myserver:8888 而不是 127.0.0.1:8888 在这种情况下,内核连接文件与您无关(它们是笔记本服务器与内核对话的方式)。答案来了... 【参考方案1】:

如果您使用的是旧版本的笔记本,以下内容仍然适用。对于新版本,请参阅下面的其他答案。


Relevant section of the IPython docs

Notebook 服务器默认侦听 localhost。如果您希望它对 LAN 上的所有机器可见,只需指示它侦听所有接口:

ipython notebook --ip='*'

或其他机器可见的特定 IP:

ipython notebook --ip=192.168.0.123

根据您的环境,在监听外部接口时enable HTTPS and a password 可能是个好主意。

如果您计划经常公开服务,那么创建一个 IPython 配置文件(例如 ipython profile create nbserver)并相应地编辑配置也是一个好主意,所以您需要做的就是:

ipython notebook --profile nbserver

加载所有 ip/port/ssl/password 设置。

【讨论】:

您可以使用--NotebookApp.token=''(可能不安全)禁用密码请求:***.com/questions/41159797/…【参考方案2】:

接受的答案/信息是针对旧版本的。如何启用对新的 jupyter notebook 的远程访问?我帮你搞定了

首先,如果您还没有配置文件,请生成它:

jupyter notebook --generate-config

请注意此命令的输出,因为它会告诉您jupyter_notebook_config.py 文件的生成位置。或者,如果您已经拥有它,它会询问您是否要使用默认配置覆盖它。编辑以下行:

## The IP address the notebook server will listen on.
c.NotebookApp.ip = '0.0.0.0' # Any ip

为了增加安全性,请输入 python/IPython shell:

from notebook.auth import passwd; passwd()

您将被要求输入并确认密码字符串。复制字符串的内容,其格式应为 type:salt:hashed-password。查找并编辑以下行:

## Hashed password to use for web authentication.
#  
#  To generate, type in a python/IPython shell:
#  
#    from notebook.auth import passwd; passwd()
#  
#  The string should be of the form type:salt:hashed-password.
c.NotebookApp.password = 'type:salt:the-hashed-password-you-have-generated'

## Forces users to use a password for the Notebook server. This is useful in a
#  multi user environment, for instance when everybody in the LAN can access each
#  other's machine through ssh.
#  
#  In such a case, server the notebook server on localhost is not secure since
#  any user can connect to the notebook server via ssh.
c.NotebookApp.password_required = True

## Set the Access-Control-Allow-Origin header
#  
#  Use '*' to allow any origin to access your server.
#  
#  Takes precedence over allow_origin_pat.
c.NotebookApp.allow_origin = '*'

(重新)启动你的 jupyter notebook,瞧!

【讨论】:

根据this answer,我也需要c.NotebookApp.allow_origin = '*' @ijoseph 感谢您的贡献,在答案中添加了 allow_origin!

以上是关于如何接受来自其他计算机的 ipython 连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何让套接字仅接受来自本地主机的连接(在 Java 中)?

如何为 ipython 集群(ipcluster)设置 ssh 隧道

如何让 netcat 接受来自 LAN 外部的连接?

使用 Python 多处理解决令人尴尬的并行问题

如何启动 IPython 内核并使用 ZMQ 套接字进行连接?

如何在Azure VM上配置IIS站点以接受来自其他外部IP地址的请求?