【小ネタ】 AWS Systems Manager のマネージドインスタンス(RaspberryPi)を踏み台にして、Windows10にリモートデスクトップで接続してみました。

2020.09.03

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

1 はじめに

AWS Systems Manager(以下、SSM)では、エージェントをインストールすることで、AWS経由で遠隔からの簡単に操作が可能になります。しかし、残念ながらWindows 10には、対応したSSMエージェントがありません。

今回は、Windows10と同じネットワークに、エージェントをインストールしたRaspberryPiを配置し、これを踏み台にしてリモートデスクトップで接続する要領を試してみました。

構成は、以下のとおりです。

MacからRasberryPiに対し、SSHでポートフォワーディングを構成し、Microsoft Remote Desktopでローカルに対してアクセスしています。

申し訳ありませんが、本記事は、単純にsshでポートフォワーディングしているだけです。個人的な備忘録になっている事をどうかお許しください。

2 作業内容

作業した内容は以下のとおりです。

  • アクティベーションの作成
  • RaspberryPiにSSMエージェントをセットアップ
  • Windows10でリモート接続を許可
  • SSHでポートフォワーディング
  • RDPクライアントで接続

(1) アクティベーションの作成

AWS Systems Managerのコンソールからインスタンスとノード > ハイブリッドアクティベーション と辿りアクティベーションの作成を選択します。

適当な名前だけを指定して作成します。

特に何も設定しないで作成すると、24時間以内に1回だけ登録可能なアクティベーションが生成されます。上部に表示されているActivation CodeActivation IDをコピーしておいて下さい。

なお、IAMロールは、AmazonSSMManagedInstanceCoreAmazonSSMDirectoryServiceAccessがアタッチされたデフォルトのAmazonEC2RunCommandRoleForManagedInstancesというRoleが設定されています。

(2) RaspberryPiにSSMエージェントをセットアップ

踏み台として使用するRaspberryPiにSSMのエージェントをインストールして、登録します。
参考:Step 5: Install SSM エージェント for a hybrid environment (Linux)

※ "activation-code" と "activation-id" は、先程コピーしたものを使用します。

mkdir /tmp/ssm
$ sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
$ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
$ sudo service amazon-ssm-agent stop
$ sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "ap-northeast-1" 
New Seelog Logger Creation Complete
2020-09-02 21:15:43 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-0c26ad2025e41df5c
$ sudo service amazon-ssm-agent start

2023/11/12 修正 登録されたインスタンスは、マネージドインスタンスに列挙されます。
登録されたインスタンスは、フリートマネージャーに列挙されます。

(3) Windows10でリモート接続を許可

コントロールパネル > システムセキュリテイ > このコンピューターへのリモート接続を許可する を選択します。

※ Administratorsグループ以外のユーザーの場合は、ユーザーの選択から追加が必要です。

(4) SSHでポートフォワーディング

SSHで踏み台経由でポートフォワーディングするには、以下のコマンドを実行します。

$ ssh pi@{インスタンスID} -o ProxyCommand=" sh -c \"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --p {プロファイル名}\"" -L 3389:{WindowsPCのIPアドレス}:3389

以下のように、踏み台のRaspberryPiにログイン状態になったら完了です。

(5) RDPクライアントで接続

接続先をlocalhost(127.0.0.1)に設定して起動すると、無事接続されます。

3 起動バッチファイル

SSHトンネルを作成してからRDPクライアントを立ち上げるという事で、やや作業が手間となるので、下記のようなバッチファイルを作成すると便利かもしれません。

rdp.command

#!/bin/bash
open -a "Microsoft Remote Desktop"
ssh pi@mi-0c26ad2025e41df5c -o ProxyCommand=" sh -c \"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --p profile\"" -L 3389:192.168.0.115:3389

実行権を与えてデスクトップなどを置いておけば、クリックだけで簡単に接続できるようになります。

% pwd
/Users/sin/Desktop
% chmod 755 rdp.command
% ls -la rdp*
-rwxr-xr-x@ 1 sin  staff  602  9  3 04:29 rdp.command

4 最後に

今回は、SSMのマネージドインスタンスを踏み台として、RDPに接続する要領を確認してみました。 ポート番号を3389から5900に変更すると、まったく同じ要領でVNCでも利用可能です。