FutureVuls Blog

Windows Server on EC2 に ssh で接続する | FutureVuls Blog

作成者: 棚井龍之介|Jan 22, 2024 4:30:00 PM

EC2 上で稼動する Windows Server に向けて、公開鍵認証で SSH 接続するまでの設定手順を解説します。

執筆背景

EC2 上で稼働する Windows Server に接続したい場合は、「リモートデスクトップ(RDP)」が第一候補です。

RDP 接続により、リモートサーバに対して「使い慣れた Windows 画面での GUI 操作」が可能です。また、そのセッション内にて「PowerShell や CommandPrompt の起動、コマンド実行」も可能なため、aws-cli の ssm で接続するよりも直感的に操作できます。

「人が直接操作する」のであれば RDP で十分ですが、システム運用状況によっては「Windows Server へ定期的に接続して対応する処理(ex. 定常業務)」も発生します。その自動化ニーズが発生することを踏まえると「Windows Server での CLI 操作」についても、一通りの知見を身に着けておくことが望ましいのではないでしょうか。

AWS が提供する Windows Server 用の AMIs には、デフォルトで SSM Agent がプリインストール されています。そのため、適切な IAM インスタンスプロファイルが付与されていれば、ssm によるリモート接続が可能です。ただし、サーバ内の sshd service はデフォルトでオフとなっているため、もし ssh でリモート接続したい場合には、サーバ内での事前準備が必要となります。

本ブログでは、EC2 上の Windows Server に向けて、SSH で接続するまでの流れを解説します。

前提

本ブログの内容は、以下環境にて実行したものです。

Windows Server への SSH 接続に向けて、以下の流れで説明します。

  • リモートデスクトップ(RDP)で Windows Server に接続し、sshd を立てる
  • Windows Server に向けて、SSH で接続する

また、本手順では Windows Server 内部での設定のみを説明対象としているため、EC2 に紐づくセキュリティグループやサブネットのルートテーブルは、予め適切に設定されていることとします。

作業途中のトラブルシューティング用に「tips」を記載していますので、必要に応じて参照してください。

Windows Server に sshd を立てる

Windows Server に RDP(リモートデスクトップ)で接続して、サーバ内に sshd を立てるまでの流れを説明します。
RDP クライアントには、管理者権限を持つ Administrator を利用します。

OpenSSH.Server をインストールする

まず、RDP でサーバに接続したら、PowerShell を管理者権限で起動します。

以下コマンドを実行して、OpenSSH のインストール状況を確認します。

EC2 立ち上げ直後の筆者環境(Windows_Server-2022-English-Full-Base-2024.01.16)では、以下出力が得られました。

State の値により OpenSSH.Server のインストール有無を確認し、NotPresent であれば、以下のインストールコマンドを実行します。

インストールコマンドの実行後、OpenSSH.Server の State 値が Installed と表示されていれば、インストール作業は完了です。

sshd service を起動する

管理者権限で Powershell を起動した状態で、以下のコマンドを実行します。

サービスの起動状況は、Get-Service <サービス名> により確認できます。

続いて、ファイアウォールの設定に移ります。
以下コマンドにより、OpenSSH-Server-In-TCP の設定状況を確認してください。

ルールを設定済みであれば、以下の出力が得られます。
OpenSSH-Server-In-TCP が表示され、かつ、Enabled の値は True であれば、ルール追加は不要です。

確認コマンドの実行後、以下の出力が得られた場合には、ルールを再作成してください。

  • Get-NetFirewallRule にて OpenSSH-Server-In-TCP のルールが表示されない
  • OpenSSH-Server-In-TCP のルールは表示されるが、Enabled の値は異なる

ルールの再作成後、以下の出力が得られたら、ファイアウォールルールの設定作業は完了です。

以上で sshd service の起動が完了しました。

Windows Server へ SSH で接続する

パスワード認証での接続

Windows Server にて sshd を起動済みのため、通常の ssh コマンドにて接続可能です。

公開鍵認証での接続

(オプション)公開鍵/秘密鍵のペアを作成する

※本ブログでは、説明の都合上「ログイン先サーバ(Windows Server)で生成した 秘密鍵 を、ログイン元サーバに scp で複製する」という手順を説明しております。しかし、実運用においては「ログイン元サーバで生成した 公開鍵 を、ログイン先サーバに scp で複製する」という方法を利用してください。

以下、Windows Server 内にて、公開鍵/秘密鍵のペアを作成する手順を説明します。

RDP により Windows Server へ接続後、PowerShell を起動します。
以下コマンドを実行して、公開鍵認証用のキーペアを作成してください。

scp 等により秘密鍵(id_rsa)をログイン元のサーバへ複製した後、Windows Server 内からは削除してください。

公開鍵認証を有効にする

Windows Server 内の sshd_config ファイル内の設定項目を編集して、公開鍵認証をオンに変更します。

このファイルは、デフォルトでは C:\ProgramData\ssh\ 配下に配置されています。
RDP によりサーバへ接続後、メモ帳などで sshd_config を開き、関連項目を編集してください。

以下項目が、公開鍵認証の有効化・無効化に対応しています。

パスワード認証が不要であれば、次の項目で設定可能です。

変更内容を反映させるために、sshd を再起動します。

administrators_authorized_keys に公開鍵を登録する

Administrator などの「管理ユーザ」を利用して、公開鍵認証により SSH 接続する場合、C:\ProgramData\ssh\ 配下の administrators_authorized_keys に公開鍵を登録する必要があります。

RDP により接続後、PowerShell にて administrators_authorized_keys を作成し、公開鍵を登録します。

administrators_authorized_keys の権限が、上記ログの通りに表示されていれば、公開鍵の登録は完了です。

公開鍵の登録後、SSH による接続を確認します。

以上で、Windows Server に向けた、公開鍵認証による SSH 接続設定は完了です。

tips

SSH 接続の動作検証時に役立つ tips を紹介します。

SSH 接続で起動するシェルを「PowerShell」にする

Windows Server への SSH 接続時、デフォルトでは「CommandPrompt(cmd.exe)」が起動します。

管理者特権で起動した PowerShell にて以下コマンドを実行することで、SSH 接続時に起動するシェルを「PowerShell(powershell.exe)」に変更できます。

sshd のログ確認

sshd_config に記載された「# Logging」を編集することで、sshd ログの「出力内容」と「出力場所」を変更できます。

デフォルトでは以下内容が記載されています。

#(コメントアウト) を外して以下設定に変更することで、sshd がより詳細なログを出力するようになります。

SyslogFacility LOCAL0

  • デフォルトの値は AUTH です
  • LOCAL0 を指定すると、ログの出力先がC:\ProgramData\ssh\logs\ になります

LogLevel DEBUG3

  • デフォルトの値は INFO です
  • パラメータは複数あり、右側の値ほどログ出力内容が詳細になります

sshd を再起動すると、sshd_config に指定したログが出力されるようになります。

参照サイト