データ解析日記

日頃のデータ解析作業で得られた知見を気まぐれで投稿します。

Jupyter Labへリモートアクセスする

背景

Jupyter Labは、初期設定のままだと、ローカル端末での使用を想定したものになっている。
リモートサーバー上のJupyter Labにリモートからアクセスするには、別途設定が必要となる。

検証環境

ローカルPC:mac OS 12.1 (Monterey)
リモートサーバー:Ubuntu 20.04、Anacondaにてpython3.9.12を使用

1. Jupyter Labをインストールする

Project Jupyter | Installing Jupyterに従う。
リモートサーバーにsshで入り、コマンドラインにて、

pip install jupyterlab

を実行する。
インストール完了後、同じコマンドラインにて、

jupyter-lab

を実行すると、Jupyter Labを起動できるのだが、
以下の作業を実行しないと、Jupyter Labに入れない。

2. リモートアクセスを可能にするためのJupyter Labの設定を行う

2-1. Jupyter Labにパスワードを設定する

リモートサーバーのコマンドラインにて、

ipython

を実行する。その後、

from jupyter_server.auth import passwd; passwd()

を実行することで、Jupyter Labに入る際のパスワードを設定する。
設定すると、暗号化したパスワード ('argon2:$ ... ') が出力されるので、メモ帳等にメモしておく。

2-2. jupyter configを用いた設定を行う

リモートサーバーのコマンドラインにて、

jupyter-lab --generate-config

を実行すると、ホームディレクトリに設定ファイル ~/.jupyter/jupyter_notebook_config.py が生成される。
これをテキストエディタemacs, viなど) で開き、以下の項目のコメントアウト (#) を外した上で編集する。

c.ServerApp.allow_remote_access = True
c.ServerApp.ip = 'localhost'
c.ServerApp.open_browser = False  #リモートサーバーでブラウザが開かないようにする設定
c.ServerApp.password = '(上でメモした暗号化パスワード)'
c.ServerApp.port = 9999

3. Jupyter Labへリモートアクセスする

一度リモートサーバーからexitし、再度sshで入る。その際、

ssh (ユーザー名)@(リモートサーバー名) -L 9999:localhost:9999

とし、リモートサーバーの9999ポートに接続する。
コマンドラインにて、

jupyter-lab

を実行すると、Jupyter Labが起動。

[I yyyy-mm-dd hh:mm:ss ServerApp] Jupyter Server 1.17.1 is running at:
[I yyyy-mm-dd hh:mm:ss ServerApp] http://localhost:9999/lab
[I yyyy-mm-dd hh:mm:ss ServerApp]  or http://127.0.0.1:9999/lab
[I yyyy-mm-dd hh:mm:ss ServerApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2)

のような出力が出たことを確認し、
ローカルPCのブラウザで http://localhost:9999/lab 、または http://127.0.0.1:9999/lab にアクセスする。
先ほど設定したパスワードを入力すると、ブラウザ上でJupyter Labを使えるようになる。

参考

UbuntuにSSH接続してJupyter Labを使う方法 | サイエンス備忘録を参考にした。
内容はほとんど同じだが、一部仕様が異なる部分があったため、改めて記事としてまとめさせていただいた。
(具体的には、IPython.lib の中に passwd が存在せず、importできなかった)