目次

Ubuntu18 LTSへのJupyter Notebookリモート環境構築

2018/10/06

Jupyter Notebookのインストール

$ pip3 install jupyter

設定ファイルの作成

Jupyter Notebookのログインパスワードを生成

$ ipython
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password:  (パスワードを入力)
Verify password: (パスワードを入力)
Out[2]: 'sha1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx'  << 後続の手順で使用

In [3]: exit()
$ mkdir ~/.jupyter
$ vi ~/.jupyter/jupyter_notebook_config.py

以下の設定ファイルを定義

~/.jupyter/jupyter_notebook_config.py

c = get_config()

# notebook上でplotを表示できるようにする
c.IPKernelApp.pylab = 'inline'

# 全てのIPから接続を許可
c.NotebookApp.ip = '0.0.0.0'

# IPython notebookのログインパスワード
c.NotebookApp.password = 'sha1:前手順で作成したSHA-1'

# 起動時にブラウザを起動させるかの設定
c.NotebookApp.open_browser = False

# ポート指定
c.NotebookApp.port = 8888

IPアドレスの指定について補足

c.NotebookApp.ip = '0.0.0.0'のIPアドレス部分に*を指定すると、Jupyter起動時にエラーとなるため、0.0.0.0とした。

Jupyterの起動

sudoは不要

$ jupyter notebook
[I 23:05:52.284 NotebookApp] Serving notebooks from local directory: /home/user名
[I 23:05:52.284 NotebookApp] The Jupyter Notebook is running at:
[I 23:05:52.284 NotebookApp] http://(ドメイン名 or 127.0.0.1):8888/
[I 23:05:52.285 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Jupyterの停止

Ctrl+Cで停止

^C[I 00:31:27.213 NotebookApp] interrupted

Shutdown this notebook server (y/[n])? y
[C 00:31:31.175 NotebookApp] Shutdown confirmed
[I 00:31:31.176 NotebookApp] Shutting down 0 kernels

FWルールの編集

Jupyter NotebookがLISTENしているTCP:8888のインバウンド通信を上位のFWで許可する

jupyter_notebook_install_01.png

Jupyter Notebookへのアクセス

http://JupyterをインストールしたマシンのIP:8888/ にアクセス

ログインダイアログに、Jupyterのログインパスワードを応答

jupyter_notebook_install_02.png

トップページ(ユーザのホームディレクトリ)が表示され、Jupyter Notebookが利用可能となる。

注意: ログインパスワードの漏洩対策

Jupyter Notebookはhttpサーバとして稼働しており、通信の暗号化の措置は行われていない。

Jupyter Notebookへのログインセッションは平文のHTTPで行われるため、キャプチャするとパスワードがそのまま取得できてしまう。

jupyter_notebook_install_03.png

Jupyter Notebookをリモートで使用する場合は、
以下の対処を実施することが望ましい。

  • Jupyter Notebookのパスワードは、サーバのOSログインパスワード等とは全く別のものを設定する
  • Jupyter Notebookの前段にNginx等をTLSプロキシとして配置して、通信経路を暗号化する

    Client                                -----------------
    ↓                                         ↑
    (Internet)                            この範囲がTLSで暗号化
    ↓                                         ↓
    NginxなどのTLS対応のWebサーバ            -----------------
    (TCP:8443などでHTTPSで待ち受け)
    ↓
    (Nginxから同サーバ上のJupyter Notebook(TCP:8888)へ転送)
    ↓
    Jupyter Notebook
    (TCP:8888 平文のHTTPで待ち受け)
    

以上