お世話になっているクラメソさんの記事(Mac向け)を見て、私のUbuntu PC環境でもいけるかなとやってみました。
Ubuntu PC側作業
まずはawscliを最新に更新します。
$ sudo apt update && sudo apt install awscli
$ pip install --upgrade awscli
この時点ではstart-sessionサブコマンド打っても繋がりません。
$ aws ssm start-session --target i-xxxxxxxxxx An error occurred (TargetNotConnected) when calling the StartSession operation: i-xxxxxxxxxx is not connected.
プラグインをインストールが必要になります。 yumとdebのパッケージが提供されているみたいです。Ubuntuなんでdebを取得。
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
$ sudo dpkg -i session-manager-plugin.deb
プラグインのインストール確認は以下のコマンドで可能です。
$ session-manager-plugin Session-Manager-Plugin is installed successfully. Use AWSCLI to start a session. $ session-manager-plugin --version 1.0.0.0
サーバー側
冒頭のクラメソさんの記事通り、AmazonEC2RoleforSSM
のポリシーをロールにEC2にアタッチしておきます。
あとはssmのAgentを更新します。
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm $ sudo systemctl restart amazon-ssm-agent
ロールの反映は amazon-ssm-agent
の再起動が必要みたいです。
Shell Accessで接続
これで接続できます。
$ aws ssm start-session --target i-xxxxxx Starting session with SessionId: yusuke.otomo-yyyyyyy sh-4.2$
コマンドの仕様はこちらです。
start-session — AWS CLI 1.16.13 Command Reference
ssm-userでログオンされているので、適宜スイッチして作業しようかと思ってます。
sh-4.2$ whoami ssm-user sh-4.2$ sudo su - ec2-user [ec2-user@dev ~]$
ロギング設定
設定テンプレートファイルから設定ファイルを作成します。
$ sudo cp -ai /usr/local/sessionmanagerplugin/seelog.xml{.template,}
$ cat /usr/local/sessionmanagerplugin/seelog.xml <!--SessionManagerPlugin uses seelog logging --> <!--Seelog has github wiki pages, which contain detailed how-tos references: https://github.com/cihub/seelog/wiki --> <!--Seelog examples can be found here: https://github.com/cihub/seelog-examples --> <seelog type="adaptive" mininterval="2000000" maxinterval="100000000" critmsgcount="500" minlevel="off"> <exceptions> <exception filepattern="test*" minlevel="error"/> </exceptions> <outputs formatid="fmtinfo"> <rollingfile type="size" filename="/usr/local/sessionmanagerplugin/logs/session-manager-plugin.log" maxsize="30000000" maxrolls="5"/> <filter levels="error,critical" formatid="fmterror"> <rollingfile type="size" filename="/usr/local/sessionmanagerplugin/logs/errors.log" maxsize="10000000" maxrolls="5"/> </filter> </outputs> <formats> <format id="fmterror" format="%Date %Time %LEVEL [%FuncShort @ %File.%Line] %Msg%n"/> <format id="fmtdebug" format="%Date %Time %LEVEL [%FuncShort @ %File.%Line] %Msg%n"/> <format id="fmtinfo" format="%Date %Time %LEVEL %Msg%n"/> </formats> </seelog>
minlevel="off"
の部分を minlevel="debug"
などに変えます。
$ diff -u /usr/local/sessionmanagerplugin/seelog.xml{.template,} --- /usr/local/sessionmanagerplugin/seelog.xml.template 2018-09-06 16:01:52.000000000 +0900 +++ /usr/local/sessionmanagerplugin/seelog.xml 2018-09-13 11:31:28.892641018 +0900 @@ -1,7 +1,7 @@ <!--SessionManagerPlugin uses seelog logging --> <!--Seelog has github wiki pages, which contain detailed how-tos references: https://github.com/cihub/seelog/wiki --> <!--Seelog examples can be found here: https://github.com/cihub/seelog-examples --> -<seelog type="adaptive" mininterval="2000000" maxinterval="100000000" critmsgcount="500" minlevel="off"> +<seelog type="adaptive" mininterval="2000000" maxinterval="100000000" critmsgcount="500" minlevel="debug"> <exceptions> <exception filepattern="test*" minlevel="error"/> </exceptions>
/usr/local/sessionmanagerplugin/logs/
も ssmを実行するPC側作業ユーザの所有するディレクトリに変えます。または以下のようにPC側作業ユーザの所有にしてもいけます。
$ sudo mkdir /usr/local/sessionmanagerplugin/logs/ $ sudo chown $USER /usr/local/sessionmanagerplugin/logs/
あとはログ見ながら、実際にstart-sessionすると、出力が確認できます。
$ sudo tail -f /usr/local/sessionmanagerplugin/logs/session-manager-plugin.log
ちなみにdebugレベルのログはこんな雰囲気です。普段はinfoレベルでも良さそうな気もしますが、ログのローテーションあるので要件次第でしょうか。
2018-09-13 11:42:30 DEBUG Processing stream data message of type: output_stream_data 2018-09-13 11:42:30 DEBUG Payload length will be adjusted: %!(EXTRA uint32=0) 2018-09-13 11:42:30 DEBUG Send Acknowledge message for stream data: 0 2018-09-13 11:42:30 DEBUG Process new incoming stream data message. Sequence Number: 0 2018-09-13 11:42:30 DEBUG Sending input size data: {"cols":134,"rows":17} 2018-09-13 11:42:30 DEBUG Payload length will be adjusted: %!(EXTRA uint32=0) 2018-09-13 11:42:30 DEBUG Sending message with seq number: 0 2018-09-13 11:42:30 DEBUG Add stream data to OutgoingMessageBuffer. Sequence Number: 0 2018-09-13 11:42:30 DEBUG Processing stream data message of type: acknowledge 2018-09-13 11:42:30 DEBUG Retransmission timeout calculated in mills. AcknowledgeMessageSequenceNumber: 0, RoundTripTime: %!d(float64=9.0065270125e+07), RoundTripTimeVariation: %!d(float64=1.986945975e+07), RetransmissionTimeout: 169 2018-09-13 11:42:30 DEBUG Delete stream data from OutgoingMessageBuffer. Sequence Number: 0 2018-09-13 11:42:30 DEBUG Processing stream data message of type: output_stream_data 2018-09-13 11:42:30 DEBUG Payload length will be adjusted: %!(EXTRA uint32=0) 2018-09-13 11:42:30 DEBUG Send Acknowledge message for stream data: 1 2018-09-13 11:42:30 DEBUG Process new incoming stream data message. Sequence Number: 1