Windows10 に OpenSSH インストール

[OpenSSH]:https://github.com/PowerShell/Win32-OpenSSH/releases
[OpenSSH64]:https://github.com/PowerShell/Win32-OpenSSH/releases/download/0.0.24.0/OpenSSH-Win64.zip
[Putty]:http://www.putty.org/
[Poderosa]:http://ja.poderosa-terminal.com/
[TeraTerm]:https://ja.osdn.net/projects/ttssh2/

#Windows7までは **[Tera Term][TeraTerm]** 使っていましたが…
Windowsでターミナルソフトと言えば私の場合、**[Tera Term][TeraTerm]** ですが他には [Putty][Putty] や [Poderosa][Poderosa]など高機能なターミナルソフトを利用している方もいるでしょう。
この度、Windows10にノートPCを買い替えて今まで同様に**[Tera Term][TeraTerm]** をインストールしたところ、高DPIによる表示問題が出たためこれをきっかけにいろいろターミナルを探した結果、**[Windows版OpenSSH][OpenSSH]** をインストールすることにしました。

<font color="DeepPink">(2018年12月追記)
2018年4月のWindows10アップデートでOpenSSHが正式に組み込まれるようになったみたいですね。（ご指摘くださり、ありがとうございました。）
インストールに関する記述を修正しました。</font>


#Windows版 OpenSSH のインストール
2018年4月のアップデートですでにOpenSSHクライアントはインストール済のようです。
スタートメニューから [Windows の設定]-[アプリ]-[オプション機能の管理] を開いて、OpenSSHクライアントがインストール済であるか確認してください。
下記のように表示されていれば、インストール済です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/224137/537a0db0-a57f-20a5-28b5-873ebe337f7d.png" width=70%>

コマンドプロンプトを開いて、`where ssh` とコマンドを叩くと、OpenSSHコマンドの場所が確認できます。「C:&yen;Windows&yen;System32&yen;OpenSSH&yen;ssh.exe」にインストールされていることが判ると思います。
以前の私の記事では、「C:&yen;opt&yen;openssh」にインストールしていましたので、Windows10標準のコマンドが有効であることが判ります。
※過去に手動インストールし、Path環境変数に手動インストールしたパスを通している場合は削除した方が良いでしょう。


#OpenSSH を試してみる
PowerShell コンソールを起動し、Linux などで利用するときと同じく ssh と打てば SSH を利用することができます。
PowerShell コンソール上で動作しているCUIアプリですので、特に際立ったものはありませんが、表示も滲んだり日本語がアンバランスに大きくなったり変な表示になりませんので非常に快適です。
なお、Windows版OpenSSH もユーザホームに「.ssh」フォルダを作成することで config ファイルを作成して接続を簡略化することができます。
「.ssh」フォルダはExprolerで作成することができませんので、コマンドラインで作成するか一度 ssh でどこかに接続すれば known_hosts ファイルを作成するために「.ssh」フォルダが作成されますので、その後で config ファイルを作成すれば良いでしょう。
config ファイルの内容は鍵認証で接続する場合、以下のような記述で十分でしょう。


```:config
Host <ホスト名>
  User <ユーザー名>
  Hostname <接続先のホストアドレス>
  Port <ポート番号（通常は22）>
  IdentityFile <秘密鍵ファイル>
```

ホスト名は任意の名称をつけてください。
接続先のホストアドレスはIPアドレスまたはFQDNを指定してください。
ポート番号は通常SSHのデフォルトは22番ですが、セキュリティの関係で別ポート番号を利用している場合がありますので環境に応じて変えてください。
秘密鍵ファイルは鍵認証を利用する場合は必要です。

例えば以下のような config ファイルを作成したとします。


```:config
Host hogehoge
  User hogeuser
  Hostname 192.168.100.100
  Port 2222
  IdentityFile id_A.rsa
```

以下のようにコマンドを起動すれば、hogehoge の設定どおりにSSH接続ができます。

```sh:
> ssh hogehoge 
```

config ファイルは分割することも可能です。
例えば以下のようなフォルダ構成にすることが可能です。

```
$HOME/.ssh/
|-- conf.d/
|   |-- host1/
|   |   |-- config_host1
|   |   `-- id_rsa
|   `-- host2/
|       |-- config_host2
|       `-- id_rsa
`-- config
```

```config:$HOME/.ssh/config
 Include conf.d/*/config_*
```

```config:$HOME/.ssh/conf.d/host1/config_host1
 Host hogehoge.host1
  User hogehoge
  Hostname 192.168.100.100
  Port 2222
  IdentityFile ~\.ssh\conf.d\host1\id_rsa
```

```config:$HOME/.ssh/conf.d/host2/config_host2
 Host magemage.host2
  User magemage
  Hostname 192.168.100.200
  Port 3322
  IdentityFile ~\.ssh\conf.d\host2\id_rsa
```

config ファイルには `Include` キーワードを利用してファイル分割が可能です。
また、`Include` キーワード内のパスにはワイルドカードも指定が可能なので、上記フォルダ構成のように `host1`、`host2` を同じ構造で定義することが可能です。
このようにしておくことで、新しいホストが増えた場合はフォルダを追加してその配下の `config_xxx` を編集するのみですので、管理が容易です。
なお、 config ファイルの分割や `Include` キーワードの利用は OpenSSH のバージョンに依存していますのでご注意ください。（OpenSSH 7.3 以降）


#さいごに
OpenSSHがWindows標準となり、インストールなどの面倒な作業も行わなくても良くなりましたので、ますます利用が便利になったのではないでしょうか。