Tamir.SharpSsh + Windows10でSSH接続する

# はじめに
この記事では、以下のことを行います。
1. Windows10Pro環境にSSH接続できる環境を作成
2. sshdの設定を変更する
3. ```Tamir.SharpSsh```を使ってSSH接続しに行く

※SSH接続方法として、WindowsOS上にSSH接続用のユーザーを作って、それを使ってSSH接続しに行きます。

# この記事を書いたきっかけ
```Tamir.SharpSsh.jsch```を利用するレガシーなシステムを解析した際に、テスト環境がなく、テストに使えるサーバーも存在しなかったので、自分のPCにSSHのサーバー機能を入れて、とりあえず動かせるところまでを調査しました。後で忘れるとめんどそうなので、ここで備忘録としてまとめておきます。

# 読む前に入れときたい知識
```Tamir.SharpSsh```は古いライブラリのため、使える暗号化方式や鍵交換アルゴリズムなどが限られるようです。
https://teratail.com/questions/131914
WindowsのOpenSSHではデフォルトでは```Tamir.SharpSsh```で使う鍵交換アルゴリズムが使えないようになっているのか、```algorithm negotiation fail```というメッセージとともに例外が発生します。そのため、sshdの設定にて上記鍵交換アルゴリズムにかかわる設定を変更しています。

# 1. Windows10Pro環境にSSH接続できる環境を作成
## 手順1 OpenSSHサーバー機能をインストールする
スタートボタン＞設定＞アプリ＞オプション機能＞機能の追加　と進んで、「OpenSSHサーバー」にチェックを入れてインストールボタンを押下してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938020/734d41a7-3833-96e3-0a4a-e89dea5120aa.png)

この動作を行うことで、SSHサーバーの機能がインストールされます。同時に、Windowsファイアウォールの受信の規則に、TCPの22番ポートの利用を許可する設定が入ります。

## 手順2 sshdを起動する
サービス＞OpenSSH SSH Server　と進んで、「開始」ボタンを押下してください。スタートアップの種類が「手動」の場合、PCを起動するためにサービスの開始を行う必要があります。面倒であれば、「自動」にしておきましょう。そうすればいちいち「開始」ボタンを押下する必要がなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938020/28902cc3-382e-4682-806d-786889842623.png)

## 手順3 ssh接続用のユーザーを作成する
コンピューターの管理>ローカルユーザーとグループ>ユーザー　と進んでユーザーを追加します。ここで追加したユーザーのログイン情報を使ってSSH接続しに行きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938020/8d5b82e1-2622-a51e-b30a-2cbb66960ef2.png)

手順3を行えばひとまずはSSH接続ができるようになります。Windows10Proには標準でsshクライアントがインストールされていますので、コマンドプロンプトを開いて以下のコマンドを入力するとSSH接続しに行くことができます。
```ssh sshuser@localhost```
※入力後にパスワードを求められます。

# 2. sshdの設定を変更する
```%programdata%\ssh\```内に「sshd_config」ファイルが入っていますので、これを編集します。
```%programdata%```は大体```C:\ProgramData\```になってます。

## 手順1 利用可能なSSHの設定を調べる
以下のコマンドを打つとOpenSSHで利用可能な設定値を取得することができます。
Ciphers: ```ssh -Q cipher```
MACs: ```ssh -Q mac```
KexAlgorithms: ```ssh -Q kex```

※取得例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938020/4a1a4388-ffd7-fbb2-25cf-a122041f78e6.png)

それぞれ取得できた値を、以下のURLに書かれている通りに「sshd_config」ファイルに設定します。
https://man.openbsd.org/sshd_config

※設定例
```
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256,curve25519-sha256@libssh.org,sntrup4591761x25519-sha512@tinyssh.org
```

:::note alert
上記設定はあくまで検証環境などセキュリティ上問題ないPCで設定してください
利用できるもののうち、現状では推奨されない暗号化方式が含まれている可能性が大いにあります。
:::

## 手順2 sshdを再起動する
サービス＞OpenSSH SSH Server　と進んで、サービスの再起動を行ってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938020/2a68a367-f061-4b16-0a4e-909859402de3.png)

:::note warn
サービスの再起動を行うまで、「sshd_config」ファイルの設定は反映されません。
:::

# 3. ```Tamir.SharpSsh.jsch```を使ってSSH接続しに行く
※動かせるコードが手元にないため、省略します。
  実際には上記手順を行うことで接続ができると思われます。

# 補足
- Windows10ProにSSHサーバー機能を入れるには当たり前ですが管理者権限が必要です。
解析している環境では管理者権限が無く、そこだけは権限を持っている人に手伝ってもらってました。。。
- WSUS（Windows Server Update Servicesが存在する場合、SSHサーバー機能を入れる際にこける可能性があります。
Windows Updateを管理しているところなんかだと、SSHサーバー機能を入れれないことがあります。
その時は以下のURLを参考にし、手動でSSHサーバー機能をインストールしてください。
https://obenkyolab.com/?p=1681