SSH接続先でpython、Jupyter Labを使う

  • 2020-05-19
  • 2020-09-08
  • Python

SSHで接続できるリモートサーバーでpythonを使う機会があり、Jupyter Labを使えるように設定したので、そのときの手順をメモとして残しておきます

pyenv を使ってpythonをインストール

pyenvをclone

 $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

gitが使えることが前提ですが、githubからpyenvのソースコードをもってきます。

pyenvの環境設定

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile 
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile 
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

シェルがbashの場合は.bash_profile、zshの場合は.zshrcに書き換えます。シェルがわからない場合は$ echo $SHELLと打てばわかります

  1. 1行目: 環境変数$PYENV_ROOTを追加
  2. 2行目: pyenvのコマンドをPATHに追加(どこからでもコマンドを実行できるように設定)
  3. 3行目: シェルの起動時にpyenv initが実行されるように設定

.bash_profileを反映させる

$ source ~/.bash_profile

Anacondaのインストール

インストール可能なanacondaのversionを表示

$ pyenv install -l |grep anaconda 

anacondaをインストール

ここではanaconda3-5.3.0をインストールします

$ pyenv install anaconda3-5.3.0

localに仮想環境を設定

現在のディレクトリで自動でanaconda-3-5.3.1に切り替わるように設定します。

ここでは、anaconda3-5.3.1を仮想環境として扱っています。

余談ですが、pythonはバージョンの依存関係が強いので絶対にプロジェクト毎に仮想環境を作ってください

$ pyenv local anaconda3-5.3.1

ここまででpythonを使う準備ができました

リモートのJupyter Labをローカルで使えるように設定

こちらを参考にさせていただきました

このままだとまだJupyter Labを起動してもブラウザはローカルにしかないのでJupyter Labが使えないので使えるように設定します

jupyter config を生成

jupyter labの詳細な設定をするためのconfigrationを生成します。ここではconfig.pyが生成されるはずです

$ jupyter lab --generate-config

ipythonを実行し、パスワードを設定

$ ipython
in [1]: from IPython.lib import passwd
in [2]: passwd()

ここでパスワードを聞かれるので、パスワードを入力します。すると以下のような’shal:xxxxxxxxxxxx’という文字列が生成されるので、あと入力できるようにしておきましょう

out [2]: 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
in [3]: exit

config.pyを編集

~/.jupyter/jupyter_notebook_config.pyに以下の7行を追記します。

最後の行は先ほど出力された’sha1:XXXXX’に書き換えてください。またportの番号は変えても大丈夫です

vimなどのエディタを使って編集します(vimの場合は$ vi ~/.jupyter/jupyter_note_book_confi.pyですね)

c = get_config()
c.IPKernelApp.pylab = 'inline'
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.port = 9999
c.NotebookApp.allow_remote_access = True
c.NotebookApp.password = 'sha1:xxxx' 

ローカルフォワーディングでSSH接続

一度sshからlogoutし、ローカルフォワーディングでlocalhostから接続できるようにした上で接続しなおします。

$ ssh user@example.com -L 8888:localhost:9999

ここではリモート(example.com)の9999ポートとlocalhost(手元のマシン)の8888ポートが繋がるようにローカルフォワーディングをしています。

jupyter labを起動

$ jupyter lab

準備が整ったので、jupyter labを起動します。これで手元のマシンでhttp://localhost:8888にアクセスすればjupyter labが使えます。

パスワードは上記で自分が設定したパスワードを入力してください。

SSH config設定

sshconfigに以下のように記述することでsshコマンドを省略できます(.ssh/configを作って以下の例のように記述すれば、ssh host1だけで接続できます )

Host host1
    HostName example.com
    User username
    Port 22
        IdentityFile ~/.ssh/id_rsa_xxx
    LocalForward 9999 localhost:9999

おすすめ記事

超初心者向けgitコマンドの使い方

Pythonで2択から好きな方を選んでランキングをつくるプログラムを作成