按照此处列出的说明进行操作:
运行笔记本服务器 - IPython 1.2.1:下午的Hack文档 - https://ipython.org/ipython-doc/rel-1.1.0/interactive/public_server.html
我已经能够通过浏览器连接到Amazon AWS上的远程笔记本服务器。我可以使用本地qtconsole访问此内核吗?换句话说,我可以在本地客户端上执行类似的操作:
%ipython qtconsole --kernel
我担心的是上面列出的说明是指浏览器连接到远程服务器所需的密码和证书。如何使用所需的qtconsole?可能需要某种隧道才能处理这种情况?
提前致谢。
答案 0 :(得分:3)
我花了一段时间才弄清楚所以我以为我会把别人的麻烦拯救出来。链接
http://jupyter.org/qtconsole/stable/#ssh-tunnels
提供了一些线索,但不完整。请注意,我有兴趣将本地ipython qtconsole连接到远程内核。首先是开始 通过
操作远程计算机上的控制台% ipython console
这会启动亚马逊实例上的ipython控制台。接下来,我手动
将kernel-*.json
文件传输到本地计算机。此文件自动在远程实例的.ipython/profile_default/security
目录中创建。请注意,kernel-*.json
表示运行ipython console
时自动创建的内核文件。通常,这看起来像kernel-21311.json
。可以使用.ipython
配置文件对其进行配置,但这是另一个故事。
# filename: console_tunnels.py
import json
import argparse
from sshtunnel import SSHTunnelForwarder
from time import sleep
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('ipython_json',
type=str,
help='ipython kernel json file')
parser.add_argument('--host',
type=str,
help='hostname',
default='awsinstance')
parser.add_argument('-k',
'--private_key',
type=str,
help='private_key',
default='/home/reckoner/.ssh/id_rsa')
parser.add_argument('-u',
'--username',
type=str,
help='username',
default='reckoner')
args = parser.parse_args()
ports_keys = ['stdin_port', 'control_port', 'hb_port', 'shell_port',
'iopub_port']
d = json.load(open(args.ipython_json))
addresses = [('127.0.0.1', d[i]) for i in ports_keys]
with SSHTunnelForwarder(
ssh_username=args.username,
local_bind_addresses=addresses,
remote_bind_addresses=addresses,
ssh_private_key=args.private_key,
ssh_address=args.host, ):
while True:
# press Ctrl-C for stopping
sleep(0.5)
接下来,我在客户端计算机上运行上面列出的脚本
% python console_tunnels.py kernel-*.json
然后所有正确的端口都转发!
下一步是通过将本地qtconsole指向它来启动本地qtconsole kernel - * .json文件我之前下载过。
% ipython qtconsole --existing kernel-*.json
那就是它!你现在可以在qtconsole中工作,但所有的计算 发生在远程实例上。最重要的是,qtconsole中打开图形窗口会在客户端上打开它们,而数据和计算驻留在远程实例上!
享受!