Windows 10 から Windows Server(EC2) へ OpenSSH で SSH 接続してみた

Windows Server に OpenSSH Server をインストールし、クライアントから Administrator ユーザーで接続します。本記事ではパスワード認証の方法を紹介します。接続時に使用するパスワードはコンソールからキーペアを用いて取得できます。なお、公開鍵認証の方法も可能です。
2022.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Windows へ SSH したいユースケース

  • SCP でファイルを転送したい
  • コマンドを実行するだけなので、RDPをする必要性がない

前提となる環境

  • サーバー側: Windows Server 2019(AWS環境(東京リージョン)、パブリックサブネットへ構築)
    • SSM マネージドインスタンスであること
    • セキュリティグループのインバウンドルールにて、クライアントのパブリック IP アドレスからの 22 番ポートの通信が許可されている。
    • 便宜上、パブリック IP アドレスは 123.123.123.123、インスタンス ID は i-EXAMPLE としています。
  • クライアント側: Windows 10(一般的なPC、仕事で使っています)
    • AWS CLI が実行できる
    • Systems Manager に関する権限が付与されている IAM ポリシーが付与された IAM ユーザー、または、IAM ロールのクレデンシャル情報が設定されている

Windows Server に OpenSSH をインストールする

Systems Manager の機能である、Run Command をフル活用し、インスタンスへログインせずに、コマンドを実行していきます。

下記コマンドにて、OpenSSH Server をインストールします。

aws ssm send-command \
--document-name "AWS-RunPowerShellScript" \
--document-version "1" \
--targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \
--parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0"]}' \
--timeout-seconds 600 \
--max-concurrency "50" \
--max-errors "0" \
--region ap-northeast-1

Run Command でインストール確認コマンドを実行します。

aws ssm send-command \
--document-name "AWS-RunPowerShellScript" \
--document-version "1" \
--targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \
--parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["Get-WindowsCapability -Online | Where-Object Name -like '"'"'OpenSSH*'"'"'"]}' \
--timeout-seconds 600 \
--max-concurrency "50" \
--max-errors "0" \
--region ap-northeast-1

コンソールなどで結果を確認し、下記メッセージが出力されていれば成功しています。

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

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

なお、インストール後 OpenSSH SSH Server は自動的に開始されません。

RunCommand で、Open SSH Server のサービス開始し、「スタートアップの種類」を自動起動する設定へ変更、ファイアウォールの設定を行ってください。

aws ssm send-command \ 
--document-name "AWS-RunPowerShellScript" \
--document-version "1" \
--targets '[{"Key":"InstanceIds","Values":["i-EXAMPLE"]}]' \
--parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["# Start the sshd service","Start-Service sshd","","# OPTIONAL but recommended:","Set-Service -Name sshd -StartupType '"'"'Automatic'"'"'","","# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify","if (!(Get-NetFirewallRule -Name \"OpenSSH-Server-In-TCP\" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {"," Write-Output \"Firewall Rule '"'"'OpenSSH-Server-In-TCP'"'"' does not exist, creating it...\""," New-NetFirewallRule -Name '"'"'OpenSSH-Server-In-TCP'"'"' -DisplayName '"'"'OpenSSH Server (sshd)'"'"' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22","} else {"," Write-Output \"Firewall rule '"'"'OpenSSH-Server-In-TCP'"'"' has been created and exists.\"","}"]}' \
--timeout-seconds 600 \
--max-concurrency "50" \
--max-errors "0" --region ap-northeast-1

Windows のクライアントに OpenSSH をインストールする

クライアント PC で PowerShell を管理者権限で起動し、以下のコマンドでチェックします。

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

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

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

すでにインストールされていれば、そのままで問題ありません。

インストールされていなければ、下記のコマンドでインストールをしてください。

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Path          :
Online        : True
RestartNeeded : False

Windows 10 クライアントから Windows Server へ SSH 接続する

マネジメントコンソールからパスワードを取得する

RDP をする場合と同様に、マネジメントコンソールでキーペアを参照し、パスワードを取得します。

マネジメントコンソール → EC2 コンソール → インスタンス → インスタンスID → 接続 → RDP クライアント → [パスワードを取得]

SSH コマンドで接続する

いよいよ本番です。

Windows 10 クライアントから PowerShell で SSH 接続をしてみましょう。

パスワードは先ほどマネジメントコンソールから取得したパスワードを入力します。

ssh Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com
Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com's password:

できました!

administrator@EC2AMAZ-SAMPLE C:\Users\Administrator> dir
 Volume in drive C has no label.
 Volume Serial Number is 5285-5BD9

 Directory of C:\Users\Administrator

07/09/2022  08:01 AM              .
07/09/2022  08:01 AM              ..
11/14/2018  06:56 AM              Desktop
07/09/2022  08:01 AM              Documents
09/15/2018  07:19 AM              Downloads
09/15/2018  07:19 AM              Favorites
09/15/2018  07:19 AM              Links
09/15/2018  07:19 AM              Music
09/15/2018  07:19 AM              Pictures
09/15/2018  07:19 AM              Saved Games
09/15/2018  07:19 AM              Videos
               0 File(s)              0 bytes
              11 Dir(s)  13,274,353,664 bytes free

scp コマンドでファイルも送ってみます。

scp ./test.txt Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com:test.txt
Administrator@ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com's password:

test.txt                                                                              100%   18     1.2KB/s   00:00

SSH 接続をして確認をしてみます。

administrator@EC2AMAZ-SAMPLE C:\Users\Administrator> dir
 Volume in drive C has no label.
 Volume Serial Number is 5285-5BD9

 Directory of C:\Users\Administrator

07/12/2022  06:42 AM              .
07/12/2022  06:42 AM              ..
11/14/2018  06:56 AM              Desktop
07/09/2022  08:01 AM              Documents
09/15/2018  07:19 AM              Downloads
09/15/2018  07:19 AM              Favorites
09/15/2018  07:19 AM              Links
09/15/2018  07:19 AM              Music
09/15/2018  07:19 AM              Pictures
09/15/2018  07:19 AM              Saved Games
07/12/2022  06:44 AM                18 test.txt
09/15/2018  07:19 AM              Videos
               1 File(s)             18 bytes
              11 Dir(s)  13,271,130,112 bytes free

test.txt が転送されていることが確認できました。

公開鍵認証の方法

本記事ではパスワード認証での方法を紹介しましたが、公開鍵認証での方法も可能です。詳細は下記のブログをご参照ください。

Windows Server 2019 EC2インスタンスでSSHサーバーを有効にする | DevelopersIO

また、EC2Launch v2 にて SSH サーバーを自動構成する機能も追加されています。

EC2Launch v2の機能一覧 | DevelopersIO

参考資料

OpenSSH をインストールする | Microsoft Docs