SSH先のサーバ上のjupyter notebookをローカルPCで操作する

ローカルPCではスペック不足のため、計算資源豊富なリモートサーバーでjupyter notebookを使いたいと思う人は結構いると思います。 この記事ではそのためのjupyter notebookの設定方法について記載します。

(2020/05/13 パスワードの設定を追記しました。)

前提環境

  • リモートサーバーにsshでログインしている。
  • リモートサーバ ー上にpython環境が構築してあり、jupyterがインストールされている。

リモートサーバーでのjupyter設定

  1. jupyter notebookのconfigファイルを生成する

    jupyter-notebook --generate-config

    これで $HOME/.jupyter/jupyter_notebook_config.py にconfigファイルができる。

  2. 生成したconfigファイルの書き換え
    c.NotebookApp.~の項目が記載されている行を探し、アンコメントして以下の通り書き換える。

    c.NotebookApp.ip = 'localhost'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port = 8889
    c.NotebookApp.token = u''
  3. ノートブックを開くためのパスワードを設定する(セキュリティが気になる人・よくわかってない人は設定推奨)
    以下のコマンドでパスワードを設定し、ハッシュ化されたパスワードを取得する

    jupyter-notebook password

    $HOME/.jupyter/jupyter_notebook_config.json というファイルが生成されるので、そのファイルを開いて以下のハッシュ化されたパスワード(#の部分)をコピーする(#の部分はsha1:~のようになってるはずです)。

    {
    "NotebookApp": {
    "password": "#####"
    }
    }

    「2. 生成したconfigファイルの書き換え」と同様にして以下プロパティの行をアンコメントした上で先ほどコピーしたパスワードを記載する。

    c.NotebookApp.password = '#####'

以上でサーバー側での設定は終わり。

ローカルPCからの操作

  1. いつも通りsshする際に、ローカルフォワーディングする引数をつける。 例ではlocalhostのポート8889番をリモートサーバーの8889番につないでいる。 sshの引数は適宜追加して下さい。

    ssh -L 8889:localhost:8889 example.com
  2. このセッションを維持している状態で、jupyterを起動する。

  3. 普段使っているブラウザでhttp://localhost:8889/にアクセスするとリモートサーバで立ち上げたjupyter notebookに接続できる。 (パスワードを設定した人は、以下のようにパスワード入力画面が出てきますので、設定したパスワードを入力してください。)

もし開けない場合でセキュリティソフトを使用している場合は、設定したポートが閉じられていないか確認してください。

終わりに

他にも色々と設定することは可能ですが、今回紹介した方法が最低限の設定だと思います。 もしセキュリティについてよくわからないという人はパスワードを設定することを強く推奨します。 この記事ではポートを8889に設定してますが、これは適宜変更してください(複数人が同じ設定だとコンフリクトしてしまいます)。 また、もう少し細かく設定したいという場合は参照のリンク先をご覧ください。 また、Jupyterについて勉強したいという方は、PythonユーザのためのJupyter[実践]入門がJupyter Notebookでできる(したい)ことをある程度網羅しているので、参考になるかと思います。

参照