使用本地 qtconsole 连接到 AWS 上的远程内核?

Connect to remote kernel on AWS using local qtconsole?

按照此处列出的说明进行操作:

运行 笔记本服务器 — 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 一起工作?也许需要某种隧道来处理这种情况?

提前致谢。

我花了一段时间才弄明白,所以我想我可以省去其他人的麻烦。 link

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 指向 kernel-*.json 我之前下载的文件.

% ipython qtconsole --existing kernel-*.json

就是这样!您现在可以在 qtconsole 中工作,但所有的计算 发生在远程实例上。重要的是,在 qtconsole 中打开数字 windows 在 客户端 上打开它们,而数据和计算驻留在远程实例上!

尽情享受吧!