[Powershell] Windows10にOpenSSH Serverをインストールし、SSHポートフォワードによるRDPを利用可能にする


はじめに

SSHクライアントツールなどを使っていましたが、今回はPowershellでSSHポートフォワードを使ってRDPするための準備についての備忘録です

準備

ここでは、サーバ側で既にアカウントが作成されている前提で、クライアントからアクセスする方法のみ紹介します。

OpenSSHのインストール

まずはPowershellを管理者権限で実行し、下記Cmdletを実行し、インストール状況を確認します。

PS C:\WINDOWS\system32> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'                                         
Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

OpenSSH.Server が「NotPresent」となっているのでインストールされていません。

以下のCmdletを利用してインストールします。

PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Path          :
Online        : True
RestartNeeded : False

PS C:\WINDOWS\system32> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed

インストールが完了です。

なお、下記のようなエラーが発生した場合はWSUSを利用する設定になっていると思いますので、一度WSUS利用設定を解除してから実施してください。

もしくはグループポリシーエディターで、「コンピュータの構成」-「管理用テンプレート」-「システム」-「オプションコンポーネントのインストールおよびコンポーネントの修復のための設定を指定する」を有効にし、以下のチェックを入れ、グループポリシーをアップデートしてみてください。

PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Add-WindowsCapability : Add-WindowsCapability failed. Error code = 0x800f0954
At line: char:1
+ Add-WindowsCapability -Online -Name 'OpenSSH.Server~~~~0,0,1,0'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified; (:) [Add-WindowsCapability], COMException
+ FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand

gpupdate /force
ポリシーを最新の情報に更新しています...

コンピューター ポリシーの更新が正常に完了しました。
ユーザー ポリシーの更新が正常に完了しました。

OpenSSHの設定

インストール完了後は下記Cmdletを実行してOpenSSHの設定を行います。

SSHサービスを起動し、自動起動設定、ファイアウォールの設定を行います。

PS C:\WINDOWS\system32> Start-Service sshd
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType 'Automatic'
PS C:\WINDOWS\system32> Get-NetFirewallRule -Name *ssh*

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の利用準備が完了です。

実際にSSHポートフォワードによる転送設定

PS C:\WINDOWS\system32> ssh user@192.168.10.10 -i [KeyPath] -L 13389:16.32.43.123:3389

それぞれの項目としてはそれぞれ下記となります。

user@192.168.10.10 ・・・ 踏み台とするSSHサーバ
-i [KeyPath] ・・・ 秘密鍵のパス
-L 13389:16.32.43.123:3389 ・・・[ローカルで待ち受けするポート]:[接続ホスト]:[接続ポート]

実際にポートフォワードした結果は下記のように確認可能です

PS C:\WINDOWS\system32> netstat -na

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態
...
  TCP       127.0.0.1:13389      0.0.0.0:0           LISTENING
...

接続が確認できたらRDPを利用してログインします。

ログインする場合の接続先は「127.0.0.1:13389」となります。(ポートまで含める必要があります)

最後に

基本的にはTera TermなどのSSHクライアントツールを利用すれば誰でもできますが、スクリプトを組んだりする場合などはPowershellでできるようにしておいても良いかと思います。

複数接続先が存在する場合に設定ファイルから読み込んで管理するなども可能ですね。

是非参考にしてみてください。