この記事は、プロキシのさらに向こうにあるリモート上のJupyter NotebookにSSHのポート開放のみでアクセスする方法の紹介です。
---------筆者の環境---------
ローカルの端末:Windows 10, TeraTerm, Powershell
プロキシサーバ:Centos(あんまり関係ないと思う)
研究開発用サーバ:Centos(あんまり関係ないと思う)
何ができるの?
手元のwindows端末のブラウザで、プロキシのさらに向こうのサーバ上のJupyter Notebookを操作できます。このとき、ssh以外のポート開放やJupyter NotebookをSSL(暗号化して)でやりとりする必要がないという特徴があります。
今回やる「SSHポートフォワーディング」を2回使う場合と「ふつうにやる方法」を図で比較してみてください。
SSHポートフォワーディングを2回使って接続すると
・通信を暗号化できる
・ファイアウォールのポート:8888を開放しないでOK
・プロキシサーバの設定変更(websocketの許可)をしないでOK
・SSH接続できる人しかJupyter Notebookにアクセスできないので管理が楽
というメリットがありました。
デメリットとしては
・ポート:8889は使えない(jupyterに複数ログインできない)
・起動が面倒。
というのがあります。起動が面倒なのはUNIXのscreenコマンドなどで解決できそうですね。
図の例では、プロキシは「さくら」、jupyterは「GCP(Google Cloud Platform)」という別のクラウドコンピューティングサービスを利用しています。プロキシサーバ⇔研究開発用サーバの間が遠隔地であっても大丈夫なところは強みです。
やり方
<忙しい人向け>
①Jupyter Notebook を起動して放っておきます。
・なんやかんやで研究開発用サーバにsshログイン
「jupyter notebook」と叩く。このターミナルは開きっぱなしにしておく。
②プロキシサーバ⇔研究開発用サーバのSSHポートフォワーディングをして放っておきます。
・windows端末で新しくターミナルを開き、プロキシサーバにsshログイン
$ ssh -L 8888:localhost:8888 [研究開発用サーバアカウント名@研究開発用サーバアドレス] -i [秘密鍵]
と叩く。このターミナルも開きっぱなしにしておく。
③windows端末⇔プロキシサーバのSSHポートフォワーディングをして放っておきます。
・windows端末の「PowerShell」を管理者権限で起動。
$ ssh -L 8888:localhost:8888 [プロキシサーバアカウント名@プロキシサーバアドレス] -i [秘密鍵ファイル]
と叩く。このPowerShellも開きっぱなしにしておく。
最後にブラウザで「http:\\localhost:8888」にアクセスするとJupyter Notebookです。
暇だったら:
ブラウザで「プロキシサーバアドレス:8888」を叩きます→サーバのファイアウォールが機能します
プロキシサーバを通したブラウザ「研究開発用サーバアドレス:8888」を叩きます→サーバのファイアウォールが機能します
Q&A
Q. PowerShellでSSHコマンドがエラー?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\key\\test\\test\\KeyFile.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
「端末に保存してある秘密鍵のアクセス権限が緩すぎる。だから無視するわ」という意味です。
A. 秘密鍵をユーザーフォルダ以下に移動する。もしくはファイルのアクセス許可を変更してください。
UNIXでいう「chmod 600 秘密鍵ファイル」みたいなことを要求してきたわけです。
秘密鍵の場所を「%userprofile%」以下にするのが手っ取り早いです。
(もし、ユーザー名が日本語でpowershellでパス指定がエラーになるときはPowerShellのエンコードを変更 https://qiita.com/s4i/items/75c19c9feb10b54c1ce9)
どうしても、C:直下やD:ドライブなどに秘密鍵を置いてやるなら、秘密鍵ファイルを右クリックしてプロパティを開き、必要最低限にアクセス権を絞ります。
↓アクセス権の絞り方
[ファイルを右クリック]>[プロパティ]
{セキュリティ(タブ)}
(アクセス許可を変更…)の[編集]>[追加]を押す
[選択するオブジェクト名を入力してください]:kawamasa(ログイン中のwindowsのユーザー名を入力)
[名前の確認]ボタンを押して:「myPC\kawamasa(ホスト名\ユーザー名)」のように表示されたら
[OK](編集画面をクローズ)
[グループ名またはユーザー名]:kawamasa(myPC\kawamasa)と書かれたものを選択
[フル コントロール]:許可をチェック
[OK](アクセス許可の画面をクローズ)
({セキュリティ(タブ)}のまま)
[詳細設定]の画面を開く
[継承の無効化]>「このオブジェクトから継承されたアクセス許可をすべて削除します。」
[OK](詳細設定の画面をクローズ)
[OK](プロパティクローズ)