Windows10 の ssh とは
Windows10 April 2018 Update より Windows10 でもデフォルトで ssh が使用できるようになりました。
これまで Tera Term などをインストールする必要があったのでデフォルトで ssh ができるようになるのはうれしいことです。
この ssh を使って AWS の EC2 インスタンスに鍵を使ったアクセスをしてみようと思います。
AWS EC2 に Windows の ssh からアクセスする
AWS の EC2 インスタンスを作ったときに AWS 上でキーペアを作成し、それを使ったアクセスをするときに少しハマったので情報を共有します。
問題
まずは適当な EC2 インスタンスを作成し、キーペアをダウンロードします。
ここでは鍵を sample-key.pem
という名前で保存することにします。
これを使い、 ssh -i .\sample-key.pem ubuntu@{public DNS}
で EC2 のインスタンスにアクセスしようとすると
UNPROTECTED PRIVATE KEY FILE!
と怒られてしまいました。
どうやらパーミッションのエラーのようです。
Linux では chmod 0600 sample-key.pem
のようなコマンドでパーミッションを変更して対処すると問題なく ssh できるようになるようです。
しかし、 Windows には chmod がないので他の方法でパーミッションを指定する必要があります。
パーミッションの変更
パーミッションの変更はコンテキストメニューのプロパティで表示されるダイアログのセキュリティタブで編集することができますが、今回はコマンドラインで変更してみます。
まず、今どのようなパーミッションが設定されているかは icacls .\sample-key.pem
で確認することができます。
以下の4つのユーザーにパーミッションが設定されていることがわかりました。
- UILTIN\Administrators:(I)(F)
- NT AUTHORITY\SYSTEM:(I)(F)
- UILTIN\Users:(I)(RX)
- NT AUTHORITY\Authenticated Users:(I)(M)
このパーミッションの設定はそれぞれの環境によって変わると思われますが今回はパーミッションを持っているユーザーが多すぎたようなので、ssh するユーザーだけにパーミッションを与えるように設定を変更します。
まず、余分なユーザーのパーミッションを削除します。
今回はすべてのユーザーに(I) がついている(親コンテナから継承されたパーミッションである)ため次のコマンドで削除を行います。
icacls .\sample-key.pem /inheritance:r
これでパーミッションがクリアされたので ssh する ユーザーにパーミッションを設定します。
icacls .\sample-key.pem /grant "{User Name}:(F)"
これで以下のように sample-key.pem
には ssh するユーザーだけがパーミッションを持っている設定になります。
- .\sample-key.pem {PC Name}{User name}:(F)
ssh 接続のリトライ
パーミッションの設定ができたので再度 ssh -i .\sample-key.pem ubuntu@{public DNS}
で EC2 に接続を試みてみると
接続できました!