如何接受其他计算机的IPython连接?

56

我在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
}

这个问题很好理解,但我该如何设置一个服务器,使其具有永久配置,以便我可以从局域网中的其他计算机使用笔记本接口?


你想在局域网中的其他计算机上使用笔记本,还是直接使用内核(例如打开QtConsole以共享现有笔记本的内核等)?答案是不同的。 - minrk
@minrk,我想运行服务器,在局域网中从另一台计算机连接浏览器,并拥有笔记本界面,就像在本地运行命令ipython notebook --pylab一样。但在这种情况下,我必须写入局域网中另一台计算机的地址,例如http://myserver:8888,而不是http://127.0.0.1:8888。 - enedene
在这种情况下,内核连接文件对您不相关(它们是笔记本服务器与内核通信的方式)。答案即将到来... - minrk
2个回答

114
如果您正在使用旧版本的笔记本电脑,以下内容仍然适用。对于新版本,请参见下面的其他答案。

IPython文档中相关章节

默认情况下,笔记本服务器在本地主机上监听。如果您希望它对您局域网上的所有计算机都可见,只需指示它监听所有接口即可:

ipython notebook --ip='*'

或者是其他机器可见的特定IP地址:

ipython notebook --ip=192.168.0.123

根据你的环境,当监听外部接口时,建议启用HTTPS和密码

如果你计划大量公开服务,那么创建一个IPython配置文件(例如ipython profile create nbserver)并相应地编辑配置是一个好主意,这样你所需做的就是:

ipython notebook --profile nbserver

加载您的所有IP/端口/SSL/密码设置。


你可以使用 --NotebookApp.token='' 来禁用密码请求(可能不安全):https://dev59.com/UFgR5IYBdhLWcg3wk-Cd#47509274 - Ciro Santilli OurBigBook.com

21

接受的答案/信息是针对旧版本的。如何启用新版本jupyter笔记本的远程访问?我来帮你解决

首先,如果你还没有配置文件,请生成一个:

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笔记本,Voilà!


根据这个回答,我还需要添加 c.NotebookApp.allow_origin = '*' - ijoseph
1
@ijoseph 谢谢您的贡献,已将allow_origin添加到答案中! - cenk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接