# 【プレ輪講】VPN & SSH接続 普段研究室にいないとき、asariの論文アーカイブといった研究室内部のリソースにはアクセスできません。なので、「自宅にいるときも研究室の計算資源を使いたい!」というときは、VPNとSSH接続で研究室サーバーに繋げます。 ## VPN ### MacOS以外 確認済みではないが、MacOS以外のOSのVPN接続に関しては[一昨年度の資料](https://hackmd.io/@iykuetboo/HJPKBf875)をご参考ください. ### MacOS - 「システム環境設定」からVPNのタブを開く - ```VPN構成を追加```を押して、```L2TP over IPSec...```を選択 ![スクリーンショット 2024-03-31 17.38.20](https://hackmd.io/_uploads/BJ9bZoLk0.png) - 下記の情報を入力する - 共有シークレットに関して、[こちら](https://docs.google.com/document/d/1uIaf41qiEQ1m-vO_sVbIFtXEFNugNYI0Nr3Tm2KnuaM/edit)に記載しています ``` サーバーアドレス / Server addr: 157.82.69.164 アカウント名 / Account Name: [メールで通知されたアカウント名] ユーザー認証 / User Authentication: パスワード / Password パスワード / Password: [メールで通知されたパスワード] コンピュータ認証 / Machine Authentication: 共有シークレット / Shared Secret 共有シークレット / Shared Secret: [上記リンク先に記載したもの] ``` - - ![スクリーンショット 2024-03-31 17.43.07](https://hackmd.io/_uploads/BJSlQoLkA.png) - - ![スクリーンショット 2024-03-31 17.48.09](https://hackmd.io/_uploads/SJpc4jLkA.png) - オプション「すべてのトラフィックをVPN接続経由で送信」をオンにする - ![スクリーンショット 2024-03-31 17.49.47](https://hackmd.io/_uploads/B1DhNj8JC.png) - DNSサーバーに192.168.174.1を入れ、右下の「作成 / Create」を押す - ![スクリーンショット 2024-03-31 17.50.01](https://hackmd.io/_uploads/ryPqEo81A.png) - (研究室外にいる場合のみ)完成後VPNをオンにする - ![スクリーンショット 2024-03-31 17.50.21](https://hackmd.io/_uploads/SkGySsLkA.png) - asariの[Research Archive](http://asari:8888/share/ResearchArchive/)にアクセスし、卒論を閲覧できたらOK ## SSH ### MacOS以外 VPNと同様に[ー昨年度の資料](https://hackmd.io/@iykuetboo/HJPKBf875)をご参考ください. ### MacOS #### ステップ一覧 1. SSHキー作成 2. 公開鍵をサーバーに登録 3. A100の使用方法 4. SSH構成設定 #### 1. SSHキー作成 このステップによって2つのファイルが生成される - ``~/.ssh/id_rsa`` : <font color="Red">**秘密鍵!取扱注意!**</font> - `~/.ssh/id_rsa.pub` : 公開鍵。次のステップ研究室サーバーにアップロード。 <font color='red'>ルートディレクトリでの操作なので、コマンドを実行する前に必ず確認してください!</font> - ターミナルを起動 - SSHキーを作成 - ```ssh-keygen -t rsa``` を実行。(コマンド [ssh-keygen](https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html) について) - `Enter file in which to save the key:`を聞かれたらEnter - デフォルトで ~/.ssh/id_rsa に保存される - ```Enter passphrase (empty for no passphrase)``` もEnter - 設定したら毎回SSH接続時に入力する必要があるため、省略がおすすめ - ```Enter same passphrase again:``` もEnterで - 上と同じであればOK! - ![スクリーンショット 2024-03-31 18.07.33](https://hackmd.io/_uploads/B1Zk_sUJ0.png) - SSHキーの権限を変更 - とりあえず ```ls ~/.ssh``` でキーが存在することを確認する - SSHキーの権限を ```chmod 600 ~/.ssh/id_rsa``` で読み込み(r)と書き込み(w)可能に変更 - ![スクリーンショット 2024-03-31 18.09.16](https://hackmd.io/_uploads/SJlDBdi8JR.png) - システム設定を更新 - ```echo $SHELL``` でshellの種類を確認 - ```xxx/zsh``` の場合、下記通りに実行でOK - ```xxx/bash``` の場合、下記の ```.zshrc``` を全て ```.bashrc``` に読み替えてください - ```echo ssh-add --apple-use-keychain .ssh/id_rsa >> ~/.zshrc``` で ```~/.zshrc``` に追記 - **``>`` の数は2個です!!!** 1個だけだとファイルが上書きされるので、大変なことになるかもしれません - ```cat ~/.zshrc | grep ssh``` で追記が成功したかを確認 - ```ssh-add --apple-use-keychain .ssh/id_rsa``` が表示されればOK - ```. ~/.zshrc``` で ```~/.zshrc``` をリロード - ![スクリーンショット 2024-03-31 18.12.58](https://hackmd.io/_uploads/SywQYjLJC.png) #### 2. 公開鍵をサーバーに登録 - (研究室内)研究室のWiFiに接続 / (研究室外)最初に設定したVPNを接続 - [asariの論文アーカイブ](http://asari:8888/share/ResearchArchive/)にアクセスできたらOK - ```ssh <username>@<servername>``` - ```<username>``` はメールで通知されたもの - 以下は動作確認済みのためおすすめ - `ssh <username>@kujira` - 例えば`ssh imamura@kujira`みたいな - ``Are you sure you want to continue connecting (yes/no/[fingerprint])?`` 聞かれたら、`yes` と答える - ``<username>@<servername>'s password:`` はメールで通知されたパスワードをコピペ - 成功したらプロンプトの表示が ``<username>@<servername>:~$`` になる - `pwd` で現在のディレクトリを確認して、``/home/mil/<username>`` であればOK - ![スクリーンショット 2024-03-31 18.18.06](https://hackmd.io/_uploads/rJJMij81A.png) - ![スクリーンショット 2024-03-31 18.22.02](https://hackmd.io/_uploads/H1LrioU1A.png) - **研究室のサーバーに繋げたままで**、 サーバー上に `.ssh` フォルダを作る ``` cd # 念のため mkdir -m 700 ~/.ssh # フォルダ作成 + 権限変更 ls -al | grep ssh # 確認用 exit # ~/.sshが作成されたらサーバー接続を一旦切る ``` - 下記コマンドで公開鍵 ``~/.ssh/id_rsa.pub`` をサーバーにコピーする(``<username>``と``<servername>`` は忘れずに自分の環境に応じて変えてください) ``` cd scp ~/.ssh/id_rsa.pub <username>@<servername>:~/.ssh/authorized_keys ``` - 再び ``ssh <username>@<servername>`` でサーバーに接続し、**パスワードなし**で ログインできたら成功 - 最後は ``authorized_keys`` の権限を変更 - `chmod 600 ~/.ssh/authorized_keys` にすると自分のみ読み込み、書き込み可能になる - ![スクリーンショット 2024-03-31 18.26.58](https://hackmd.io/_uploads/SyCvhiIkA.png) #### 3. A100 VPNに接続,もしくは研究室内のWifiに接続中に[tai](http://tai:3000/)にアクセスすると研究室でのGPUの使用状況がわかります. ![スクリーンショット 2024-03-31 19.39.01](https://hackmd.io/_uploads/rJdMRnU10.png) 例えば画像中のbelugaはA100のGPUになります. A100は性能が良いため,研究室のみんなが平等に使用できるよう,使用方法が少し他のGPUと異なります. 試しに`ssh <username>@beluga`と打ってみても,以下のように接続できません. ![スクリーンショット 2024-03-31 19.49.44](https://hackmd.io/_uploads/ByvC1aL1R.png) A100のGPUは以下のように接続します。 - iruka2にssh接続(接続方法はA100以外のGPUを使用する場合と同じです。) - .shファイルの作成 標準出力とエラー文がファイルとして作成され、実行するたびに増えていくので実行ファイル(`main.py`)のあるところとは別にディレクトリを作成した方が良いです。 ![スクリーンショット 2024-03-31 21.22.04](https://hackmd.io/_uploads/ByxKSC8kC.png) run.shファイルの中身は以下のようになります。 ![スクリーンショット 2024-03-31 20.54.45](https://hackmd.io/_uploads/rJ7G1CL1C.png) SBATCH -tで実行時間を設定しています。`SBATCH -t 1-0`の場合は途中でも1日で接続が途切れてしまうので注意してください。延ばしたい場合は`SBATCH -t 3-0`などとすれば3日に延長できます。 実行ファイル(`main.py`)が`run.sh`と同じディレクトリ内にない場合は`python ../main.py`のようにする必要があります。また、`--epochs 20`のようにコマンドライン引数もここで指定します。 - 実行 `run.sh`ファイルのあるディレクトリに移動してから仮想環境に入った後`sbatch run.sh`として実行します。実行すると以下のようにjob numberが割り振られます。 ![スクリーンショット 2024-03-31 21.17.34](https://hackmd.io/_uploads/S1avEA8yC.png) また、標準出力とエラー文を記したファイルが作成されます。 ![スクリーンショット 2024-03-31 21.20.43](https://hackmd.io/_uploads/Bk3XrC8JC.png) もし停止したい場合は`scancel job number`で止めることができます。 ![スクリーンショット 2024-03-31 21.19.48](https://hackmd.io/_uploads/B1QxBC8k0.png) #### 4. SSH構成設定 ここまでで研究室のサーバーに接続することができました!しかし、毎回SSH接続のときに ``<username>`` を入れるのは面倒なので、``~/.ssh/config`` で構成を設定して接続を便利にしましょう。 - サーバーから `exit` で接続を切って、ローカルに戻る - `pwd` で ``/Users/xxx`` が出たらOK - 構成ファイルを作成 - ``touch ~/.ssh/config`` で構成ファイルを作成 - `open -a TextEdit ~/.ssh/config` でファイルを開く - ![スクリーンショット 2024-03-31 19.28.00](https://hackmd.io/_uploads/HJR3c2Uk0.png) - ファイルに下記をとりあえずコピペ ``` Host asari HostName asari Port 50810 User imamura IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host kujira HostName kujira Port 22 User imamura IdentityFile ~/.ssh/id_rsa ForwardAgent yes LocalForward 11900 kujira:8888 Host mil HostName 157.82.69.164 Port 50810 User imamura IdentityFile ~/.ssh/id_rsa ForwardAgent yes LocalForward 8888 asari:3000 LocalForward 8889 kujira:8888 Host milkujira HostName kujira User imamura ProxyCommand ssh -CW %h:%p mil RemoteForward 53698 localhost:52698 ``` - `command + F` で ``<username>``を検索し、全て自分のユーザーネームに置き換える(`Replace`にチェックをいれ、置き換えたい文字列を入力したら`All`を押す) - ![スクリーンショット 2024-03-31 19.28.38](https://hackmd.io/_uploads/SJGyjn81R.png) - 保存して閉じる - 構成ファイルが更新されたかを確認 - `cat ~/.ssh/config | grep asari` とかで - 研究室のWifiに繋げ(またはVPNを接続し)、以下のコマンドで接続可能かを確認 - `ssh kujira` - `<username>@kujira:~$`みたいに表示されてたらOK、これで毎回ユーザーネームを入力せずに済む - (研究室外の場合のみ) VPNしなくても、以下のコマンドでサーバー接続できるようになっています! - `ssh milkujira` - `<username>@kujira:~$`みたいに表示されてたらOK、これで毎回ユーザーネームを入力せずに済む 構成内容についての詳しい説明は[昨年の資料](https://hackmd.io/@kaiwdev/prerinko2023-vpn-ssh#VPN),[一昨年の資料](https://hackmd.io/@iykuetboo/HJPKBf875)を参照 ## おまけ -VSCODE VSCodeを使うとSSH接続がとても簡単にできます。 - [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code) - 「Remote - SSH」という拡張機能をインストールする - ![スクリーンショット 2024-03-31 19.51.59](https://hackmd.io/_uploads/HJ_vxaU1A.png) - インストールしたら左下の緑のボタンを押して、上に出てきたリストの `ホストに接続する...` を選ぶ - ![スクリーンショット 2024-03-31 19.52.56](https://hackmd.io/_uploads/S189eTLyC.png) - 先ほど `~/.ssh/config` で設定した構成のリストが表示される。試しに `milkujira` を選ぶ(研究室内の場合 `kujira` を選ぶ) - ![スクリーンショット 2024-03-31 19.53.30](https://hackmd.io/_uploads/BJOGWaLy0.png) - 新しいウィンドウが出てきて、左下に`SSH: milkujira`が表示されればOK - ![スクリーンショット 2024-03-31 19.58.34](https://hackmd.io/_uploads/S1j-GTIk0.png) - `Command + Shift + P` を押し、settings と検索する。`Preferences: Open User Settings` / `基本設定:ユーザー設定を開く`を選択。 - ![スクリーンショット 2024-03-31 20.00.32](https://hackmd.io/_uploads/SkCIMpU1A.png) - 検索欄に `ssh timeout` を入れて検索すると、`Remote.SSH: Connection Timeout (...)` が出てくる。下の秒数を`300`ぐらいに設定(つまり、接続を諦めるまで300秒だけ待つ)。 - ![スクリーンショット 2024-03-31 20.02.23](https://hackmd.io/_uploads/ryj6f6UkC.png) - もう一回 `Command + Shift + P` で `File: Open Folder` を検索し、`OK`を押す - ![スクリーンショット 2024-03-31 20.03.09](https://hackmd.io/_uploads/BJYeQTIJC.png) - そうすると、自分のルートディレクトリを閲覧できます!