---
# System prepended metadata

title: 【プレ輪講】VPN & SSH接続

---

# 【プレ輪講】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)
    
- そうすると、自分のルートディレクトリを閲覧できます！
























