Ipython 使用本地控制台连接到AWS上的远程内核?

Ipython 使用本地控制台连接到AWS上的远程内核?,ipython,ipython-notebook,Ipython,Ipython Notebook,按照此处列出的说明进行操作: 运行笔记本服务器-IPython 1.2.1:下午黑客文档- 我已经能够通过浏览器连接到Amazon AWS上的远程笔记本服务器。我可以使用本地控制台访问这个内核吗?换句话说,我可以在本地客户机上执行以下操作: %ipython qtconsole——内核 我担心的是,上面列出的说明涉及浏览器连接到远程服务器所需的密码和证书。对于所需的QT控制台,这将如何工作?也许需要某种隧道来处理这个案子 提前谢谢。我花了一段时间才弄明白,所以我想我可以省去别人的麻烦。链接 提

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

运行笔记本服务器-IPython 1.2.1:下午黑客文档-

我已经能够通过浏览器连接到Amazon AWS上的远程笔记本服务器。我可以使用本地控制台访问这个内核吗?换句话说,我可以在本地客户机上执行以下操作:

%ipython qtconsole——内核

我担心的是,上面列出的说明涉及浏览器连接到远程服务器所需的密码和证书。对于所需的QT控制台,这将如何工作?也许需要某种隧道来处理这个案子


提前谢谢。

我花了一段时间才弄明白,所以我想我可以省去别人的麻烦。链接

提供了一些线索,但不完整。请注意,我感兴趣的是将本地ipython qtconsole连接到远程内核。第一件事是启动 通过执行以下操作在远程计算机上进行控制台操作

% ipython console
这将在amazon实例上启动ipython控制台。接下来,我手动 将
kernel-*.json
文件传输到我的本地计算机。此文件在远程实例的
.ipython/profile\u default/security
目录中自动创建。请注意,
kernel-*.json
,我指的是在运行
ipython控制台时自动创建的内核文件。例如,这通常看起来像
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
就这样!现在可以在QT控制台中工作,但所有计算 在远程实例上发生。重要的是,在qtconsole中打开图形窗口会在客户机上打开它们,而数据和计算驻留在远程实例上


享受吧

我在.ipython/profile\u default/security中找不到kernel-*.json。知道会发生什么吗?@Shahensha他们可能已将其位置更改为“/run/user/jupyter/”。您可以使用strace查看程序将哪些文件写入磁盘。我使用了“strace-ipython-kernel&>strace.out”,然后通过对该文件进行灰显,发现它打开了“/run/user/1012/jupyter/kernel-27216.json”进行编写。1012是我在计算机上的uid(通过运行“id”可见)。非常感谢@amitmoscovicheiger您也可以通过在远程服务器上的python控制台中运行%connect\u info来获取json文件。这将打印json文件,然后将其复制粘贴到本地文件。除了这篇优秀的文章,请注意,通过在笔记本中键入
%connect\u info
,您可以获得json文件的名称和内容。您可以从该内容创建本地文件,而无需在远程计算机上检索该文件。