1. hayao_k

    Posted

    hayao_k
Changes in title
+Session Manager で SSH/SCPをトンネリングしてEC2に接続する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,88 @@
+## はじめに
+2019/7/9 に AWS Systems Manager Session Manager が SSHおよびSCP接続の
+トンネリングをサポートしました。
+これにより、踏み台サーバー等を使用せずに、Session Manager を介して対象のEC2や
+マネージドインスタンスに接続することが可能になります。
+
+**Session Manager launches tunneling support for SSH and SCP**
+https://aws.amazon.com/about-aws/whats-new/2019/07/session-manager-launches-tunneling-support-for-ssh-and-scp/
+
+## やってみる
+AWS Systems Manager 自体の説明は割愛させていただきます。
+
+### サーバー側の要件
+SSM Agentのバージョンが **2.3.672.0** 以上である必要があります。
+バージョンが古い場合は、Systems Managerの Run Command を使用して最新版にアップデートします。
+
+![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/f58c8101-3365-a0c1-cc9b-8a7a018e89b4.png)
+
+コマンドの履歴でアップデートが正常終了していることを確認します。
+
+![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/90845eea-6e88-ce5a-99f2-2d2862e7cdaf.png)
+
+### クライアント側の要件
+AWS CLIの他に Session Manager Pluginのバージョンが **1.1.22.0** 以上である必要があります
+
+```shell-session
+$ session-manager-plugin --version
+1.1.23.0
+```
+
+バージョンが古い場合は以下のドキュメントに沿って最新版をインストールします。
+
+**(Optional) Install the Session Manager Plugin for the AWS CLI**
+https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html
+
+また使用するSSHクライアントが ProxyCommand をサポートしている必要があります。
+私の環境はWindowsでしたので、OpenSSH + Git Bash を使用しました。
+SSH の設定ファイル(~/.ssh/config)に以下の内容を追記します。
+SSHコマンドで接続先ホスト名が i-(EC2インスタンス) または mi-(マネージドインスタンス)で
+はじまる場合は aws ssm start-session コマンドを実行するという内容になっています。
+
+```shell
+# SSH over Session Manager
+host i-* mi-*
+ ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
+```
+
+## 接続する
+SSHコマンドを実行する際にホスト名にインスタンスIDを指定すると以下のようにSSHで接続できます。
+
+```shell-session
+$ ssh -i ./my-key.pem ec2-user@i-0123456789abcdefg
+Last login: Wed Jul 10 02:56:56 2019 from localhost
+
+ __| __|_ )
+ _| ( / Amazon Linux 2 AMI
+ ___|\___|___|
+
+https://aws.amazon.com/amazon-linux-2/
+
+[ec2-user@ip-172-31-20-75 ~]$
+```
+
+Session Manger と SSM Agent を介して接続しているためだと思われますが、
+接続元はlocalhost(127.0.0.1)になっています。
+
+```shell-session
+# sudo tail -3 /var/log/secure
+Jul 10 04:26:20 ip-172-31-20-75 sshd[9269]: Accepted publickey for ec2-user from 127.0.0.1 port 41360 ssh2: RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx
+Jul 10 04:26:20 ip-172-31-20-75 sshd[9269]: pam_unix(sshd:session): session opened for user ec2-user by (uid=0)
+Jul 10 04:31:50 ip-172-31-20-75 sudo: ec2-user : TTY=pts/0 ; PWD=/home/ec2-user ; USER=root ; COMMAND=/bin/tail -3 /var/log/secure
+
+```
+
+## メリット
+### セキュリティグループでSSHを許可する必要がない
+SSM Agent を介して通信するため、EC2としてはアウトバウンド通信でSSMのエンドポイントと
+通信できればよいです。そのためセキュリティグループでSSHのポートを開けておく必要がありません。
+最近利用可能になった EC2 Instance Connect では EC2 Instance Connect が利用する
+IPアドレス範囲 をセキュリティグループに明示的に追加する必要があります。
+
+### SCPも利用できる
+Systems Manager のシェルセッションでは仕組み上、SCPの転送には対応できていませんでした
+この機能を使うとSCPによるファイル転送を行うことができます。
+
+```shell-session
+$ scp -i ./my-key.pem ./test.txt ec2-user@i-0123456789abcdefg:/tmp/test.txt
+test.txt 100% 769 38.0KB/s 00:00