TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

AWSのWindows AMIにsshで接続する

AWSWindows AMIで作成したインスタンスsshで接続する方法についてです。

使用したAMIは、「Windows_Server-2016-English-Deep-Learning-2018.03.24 (ami-4f168837)」です。

WindowsSSHサーバを構築する方法はいくつかありますが、マイクロソフトオープンソースで公開している「Win32 port of OpenSSH」を使用しました。
GitHub - PowerShell/Win32-OpenSSH: Win32 port of OpenSSH

手順は、以下の記事を参考にしました。
ASCII.jp:マイクロソフト版OpenSSHをサーバーとして動作させる
※記事にはsshdのパスに誤りがあるので要注意です。パスの誤りに気づかず数時間無駄にしてしまいました・・・

OpenSSHのダウンロード

Releases · PowerShell/Win32-OpenSSH · GitHub
から、releaseの最新版のOpenSSH-Win64.zipをダウンロードして、「C:\」に解凍します。
※現時点で最新のv0.0.24.0を使用しました。
以下、「C:\OpenSSH-Win64」に解凍した前提とします。

sshdサーバーをサービスとしてインストール

PowerShellを管理者モードで起動し、

cd C:\OpenSSH-Win64
powershell -ExecutionPolicy Bypass -File install-sshd.ps1

sshd用にファイアウオール通過のルールを設定

New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName OpenSSH -Program C:\OpenSSH-Win64\sshd.exe

参考にした記事では、「sshed.exe」になっていましたが誤りです。

ホストの認証キーを作る

.\ssh-keygen.exe -A

sshdサービスをPCの起動時に自動的に実行

Set-Service sshd -StartupType Automatic

sshd_configファイルを編集

notepad sshd_config

sshd_configをメモ帳で開いて、

#PubkeyAuthentication yes

の行頭の「#」を削除して、保存します。

ユーザーのホームフォルダ以下に.sshフォルダを作って公開鍵ファイルを置く

接続するクライアントでキーペアを作成

接続するクライアント側にもOpenSSHをダウンロードして解凍し、PowerShellを管理者モードで起動して、以下のコマンドを実行します。

cd C:\OpenSSH-Win64
.\ssh-keygen -t rsa

ユーザフォルダ(C:\Users\xxxx\.ssh\)に、「id_rsa」と「id_rsa.pub」が作成されます。

サーバ側に公開鍵を置く

クライアントで作成した「id_rsa.pub」をサーバ側の「C:\Users\xxxx\.ssh\」にコピーします。
「.ssh」はエクスプローラでは作成できないので、コマンドプロンプトで「mkdir」で事前に作成します。

「id_rsa.pub」を「authorized_keys」にリネームします。
別のクライアントの公開鍵をする場合は、「authorized_keys」に「id_rsa.pub」の内容を追記します。

authorized_keysファイルのアクセス権で変更

C:\OpenSSH-Win64\FixHostFilePermissions.ps1 -Confirm:$false

sshdサービスを再起動

restart-service sshd

接続テスト

クライアントから接続できるかテストします。

cd C:\OpenSSH-Win64
ssh <サーバのユーザ名>@<サーバのIPアドレスまたはFQDN>

以上です。