Windowsマシン同士でSSH接続，ファイル編集の備忘録

# はじめに
研究室のパソコンではビルド速度の速いTex環境を用意してある．
そこでTexファイルをノートパソコンから編集することにした．

# 要約

```:できること
- WindowsマシンでSSH接続のホストとなる
- WindowsマシンでSSH接続のクライアントとなる
- VSCodeで別のパソコンにあるファイルを編集する
```

# 前提
* プライベートネットワーク内での操作
* 外部のパソコンを操作する場合は[こちら](https://qiita.com/rintarou/items/bef523c7c8f11097e577)を参考にしてください

|    名称     |    マシン    |
|-------------|------------|
|ホストPC             | 研究室PC           |
|クライアントPC      | ノートPC|

# 接続方法
WindowsマシンをSSH接続のホストにし，そのホストにクライアントPCから接続する．
VSCodeを通してファイルの編集を行う．

## 1. ホストPCのセットアップ
### 機能のインストール
* オプション機能から「OpenSSH サーバー」を追加
* `Windows + Q`で「オプション機能」を検索

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849125/444d9505-b363-6d01-8a7d-f56ff1e300cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849125/821727a8-de32-28cf-c325-2bf7dc061724.png)


### ポート開放
* 管理者権限でPowerShellを実行
* 以下のコマンドで22番ポートを開放
```powershell
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=22 profile=private
```
* 以下のコマンドでルールの確認
```powershell
C:\Windows\System32> netsh advfirewall firewall show rule name="sshd"

規則名:                               sshd
----------------------------------------------------------------------
有効:                                 はい
方向:                                 入力
プロファイル:                         プライベート
グループ:
ローカル IP:                          任意
リモート IP:                          任意
プロトコル:                           TCP
ローカル ポート:                      22
リモート ポート:                      任意
エッジ トラバーサル:                  いいえ
操作:                                 許可
OK
```

* コントロールパネルでも確認できる
* 以下のメニューから詳細設定の「受信の規則」
```
コントロール パネル\システムとセキュリティ\Windows Defender ファイアウォール
```

### sshdのセットアップ
```powershell
C:\Windows\System32> sshd install
C:\Windows\System32> Start-Service sshd
C:\Windows\System32> Set-Service sshd -StartupType Automatic
```

## 2. クライアントPCからホストPCにssh接続
### 機能のインストール
* オプション機能に「OpenSSH クライアント」がインストールされていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849125/08b88aeb-982c-dca6-a81b-9a43a93a90b8.png)


### SSH接続の実行
```powershell
ssh <ユーザー名>@<IPアドレス or ホスト名>
```

* ユーザー名の確認方法
* 以下のコマンド出力のusernameの部分
```powershell
C:\Windows\System32>whoami
*****\username
```

* IPアドレス名の確認方法
* 以下のコマンド出力のIPv4 アドレスの部分
```powershell

C:\Windows\System32>ipconfig

Windows IP 構成


イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .: **************
   リンクローカル IPv6 アドレス. . . . .: **************
   IPv4 アドレス . . . . . . . . . . . .: ************** ← ここ
   サブネット マスク . . . . . . . . . .: **************
   デフォルト ゲートウェイ . . . . . . .: **************
```

## 3. VSCodeの設定
### 拡張機能のセットアップ
* 「[Remote-SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh)」をインストール
* インストール後に表示されるモニターアイコンをクリックし，SSHの設定アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849125/26a8adcd-6a22-9549-f94f-4f6147b07700.png)

* `C:\Users\<username>\.ssh\config`を開く
* ホスト情報を記入
* [先ほど調べた結果](#2-クライアントpcからホストpcにssh接続)を用いる
```powershell
Host <設定したい名前>
    HostName <IPアドレス>
    User <ユーザー名>
    Port 22
    IdentityFile <C:\Users\username\.ssh\id_rsa> //公開鍵認証を用いる場合
```

### 接続
* VSCodeを再起動する
* SSHの欄に先ほど設定したホストが登録される
* 右矢印アイコンもしくは新規タブアイコンを押して接続を開始する
* ホストのOSを選択してパスワードを入力する 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849125/dca33988-c696-275e-6ce4-3b21c36ccb1e.png)

# おわりに
接続する度にパスワードを入力するのがめんどくさい場合は公開鍵認証を用いたやり方をおすすめします．

# 参考文献
- [windows同士でSSH通信設定](https://qiita.com/taro0219/items/cac50f7bec48c7f5cc6d)
- [VSCodeでSSH接続](https://www.sria.co.jp/blog/2021/06/5316/)