Windows 10 に OpenSSH サーバをインストールする

Windows 10 の 1803 以降のバージョンには標準で OpenSSH クライアントがインストールされていますが、アドオンとして OpenSSH サーバも用意されています。
この記事では、標準で用意されている OpenSSH サーバのセットアップ手順を解説します。

## インストール手順

インストールは GUI（設定アプリ）でのやり方と、コマンド（PowerShell）でのやり方と 2 種類あります。  
より具体的な手順は以下を参考にして下さい。

[https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse](https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse)
[Windows 10 にオンデマンド機能の OpenSSH サーバをインストールする方法](https://www.atmarkit.co.jp/ait/articles/1903/28/news005.html)

以下、コマンドラインでのインストール方法について解説します。

**PowerShell** を **管理者モード** で開きます。

以下のように実行します。

```PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
```

正常終了すると以下のように返却されます。

```
Path          :
Online        : True
RestartNeeded : False
```

環境によっては、以下のように失敗することがあります。

```
Add-WindowsCapability : Add-WindowsCapability failed. Error code = 0x800f0954
At line:1 char:1
+ Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Add-WindowsCapability], COMException
+ FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand
```

これは WSUS 導入環境など、 Windows のコンポーネントをインターネット経由ではなく WSUS サーバから配信しているような環境で起こる現象です。

これは**グループポリシーエディタ**で解決する事ができます。
[OpenSSH Server Install failed, contact your administrator to get this feature](https://social.technet.microsoft.com/Forums/en-US/251804c1-883e-4ec8-a378-352dabbe87dd/openssh-server-install-failed-contact-your-administrator-to-get-this-feature?forum=ws2019)

```PowerShell
gpedit.msc
```

ローカルグループポリシーエディターが開いたら、「**コンピューターの構成**」→「**管理用テンプレート**」→「**システム**」と展開します。
「**オプションコンポーネントのインストールおよびコンポーネントの修復のための設定を指定する**」をダブルクリックします。
![ssh-lgp-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162138/408667d3-9502-b54c-8279-227c344adc83.png)

ウインドウ左上の「有効」ラジオボタンをクリックし、左下の「**Windows Server Update Service (WSUS) の代わりに、Windows Update から修復コンテンツとオプションの機能を直接ダウンロードする**」にチェックを入れます。
![ssh-lgp-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162138/25401082-c3fd-7338-10e3-cbd9c7a91d4d.png)

「適用」をクリック、「OK」をクリックします。
ローカルグループポリシーエディターも閉じて OK です。

PowerShell（管理者モード）で以下のように実行します。

```PowerShell
gpupdate /force
```

そのあと、もう一度インストールを試行します。

```PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
```

これで成功するはずです。

## OpenSSH の設定

引き続き PowerShell（管理者モード）での作業です。

SSH サービスを起動します。

```PowerShell
Start-Service sshd
```

サービスを自動起動したいなら以下のコマンドを実行します。

```PowerShell
Set-Service -Name sshd -StartupType 'Automatic'
```

ファイアウォールの設定をします。

```PowerShell
Get-NetFirewallRule -Name *ssh*
```

以下のように、`Enabled : True` と返って来れば OK。

```
Name                  : OpenSSH-Server-In-TCP
DisplayName           : OpenSSH SSH Server (sshd)
Description           : Inbound rule for OpenSSH SSH Server (sshd)
DisplayGroup          : OpenSSH Server
Group                 : OpenSSH Server
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local
```

## SSH 接続

PuTTY や Tera Term で localhost:22 への接続を試行します。
もちろん PowerShell で `ssh localhost` でも OK です。
端末を Microsoft アカウントで利用している場合でも、実ユーザー名（C:¥Users¥???? の ???? の部分）とそのパスワードでログインできます。

ネットワーク上の他の端末から SSH 接続がうまく行くかも確認しましょう。

**Windows のデフォルトシェルはコマンドプロンプトなので注意。**

## 参考

https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse
https://social.technet.microsoft.com/Forums/en-US/251804c1-883e-4ec8-a378-352dabbe87dd/openssh-server-install-failed-contact-your-administrator-to-get-this-feature?forum=ws2019