如何在本地计算机上自动初始化远程Jupyter笔记本?

时间:2018-01-31 04:29:07

标签: bash ssh jupyter-notebook

我喜欢使用从笔记本电脑远程连接到PC的Jupyter笔记本电脑。我希望通过ssh自动化连接到PC的过程,在PC中初始化Jupyter笔记本,然后在我的笔记本电脑上打开浏览器以访问该笔记本。目前,这些是我采取的步骤:

  1. SSH进入远程PC并通过执行jupyter notebook --no-browser --port=8889
  2. 初始化Jupyter笔记本
  3. 返回本地计算机,运行ssh -N -L localhost:8887:localhost:8889 username@PC_IP_address将远程端口8889绑定到本地端口8887
  4. 然后我在笔记本电脑上打开浏览器,通过网址https://localhost:8887
  5. 访问远程笔记本

    PC和笔记本电脑都在同一个网络上。我通过在Iterm3中创建执行脚本的配置文件,在本地计算机上自动化2.我希望自动化整个过程,以便使用一个别名,我可以在本地计算机上启动远程笔记本。非常感谢。

2 个答案:

答案 0 :(得分:3)

如果我是你,我会使用一个功能。把它放在.bashrc

jupy(){
    ssh username@PC_IP_address jupyter notebook --no-browser --port=8889
    ssh -N -L localhost:8887:localhost:8889 username@PC_IP_address
    firefox https://localhost:8887
}

答案 1 :(得分:1)

经过多方努力,这是一个适合我的hacky解决方案

jupykaggle(){
    # arguments: projectfolder environmentname
    competitionfolder=$1
    envname=$2
    ssh USER@IPADDRESS "cd Dropbox/data_science/kaggle/${competitionfolder};
                                source /home/USER/anaconda2/bin/activate ${envname};
                                /home/USER/anaconda2/bin/conda env list;
                                kill \`lsof -t -i:8889\`;
                                /home/USER/anaconda2/envs/${envname}/bin/jupyter notebook --no-browser --port=8889; exit"

    # after notebook is initialized in remote host, Control+c to exit this ssh session
    # and enter the second one to bind the remote port 8889 to local port 8887
    echo "Bind remote port 8889 to local port 8887"
    ssh -N -L localhost:8887:localhost:8889 USER@IPADDRESS
}

alias jupybrowser='open -a /Applications/Google\ Chrome.app http://localhost:8887'

我执行

jupykaggle projectfolder environmentname

进入项目目录,激活虚拟环境,终止我需要使用的端口中运行的进程,并使用该端口初始化jupyter笔记本(使用虚拟环境中的安装)。然后我退出此ssh会话并进入另一个ssh会话,我将远程端口8889绑定到本地端口8887.最后一个别名只是打开本地主机8887中的Chrome浏览器以打开笔记本。

我仍然需要从远程笔记本复制并粘贴令牌,但这没关系。与我以前的工作流程相比,这仍然显着减少了步骤。

欢迎提出改进建议。