🔄
EC2とファイル送受信する方法 /AWS Systems Manager セッションマネージャーを使うけど鍵は使わずncで実現
EC2とファイル送受信する方法です。
AWS Systems Manager セッションマネージャーを使うけど鍵は使わずnc
で実現します。
なぜやるか
SCPでファイル転送する方法はよく紹介されているけど、SCPによるファイル転送を行うためにはSSH鍵を準備する必要がある。
鍵の作成が不要である所もAWS Systems Manager セッションマネージャー の利点だと思っているので、ファイル転送のためだけに鍵を準備するのは行いたくない。
SCPで行う場合はクラスメソッドの記事がわかりやすい
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました
$ scp -i ~/path/to/key.pem foo.txt ec2-user@i-12345:~/
https://dev.classmethod.jp/articles/session-manager-launches-tunneling-support-for-ssh-and-scp/
どうやるか
次のgistで紹介されているncを使って実現します。
手順
ほぼ同じ手順だけど、送信と受信の手順を以下に記載します。
手順ではテキストファイルを送受信しているが、tar.gz
ファイルなどのテキストファイル以外も送受信可能です。
送信(ローカルPCからEC2インスタンスへ)
# ssmで送りつける先のEC2に接続する
aws ssm start-session --target i-1234567890
# EC2側でncのインストールを行う
sudo yum install nc -y
# 念のためホームディレクトリに移動してから
# ncをLISTENモードで起動して1234ポートでリクエストを待つ
# 届いたデータはoutput.txtに出力する
sudo nc -l -p 1234 > ~/output.txt
# 新しいローカルシェルを開いて、SSMを使ったポートフォワードを起動する
# portNumberは前のncコマンドで指定した1234と合わせること
aws ssm start-session --target i-1234567890 --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["1234"],"localPortNumber":["1234"]}'
# また新しいローカルシェルを開いて、送りたいファイルのデータをncコマンドに流す
nc -w 3 127.0.0.1 1234 < sendfile.txt
# 最初のシェルに戻ってncコマンドをCtrl-cで止める
# ホームディレクトリにoutput.txtができあがっている
ls ~/
受信(EC2インスタンスからローカルPCへ)
# ssmで送りつける先のEC2に接続する
aws ssm start-session --target i-1234567890
# EC2側でncのインストールを行う
sudo yum install nc -y
# sendfile.txt を送信する
sudo nc -l -p 1234 < ~/sendfile.txt
# 新しいローカルシェルを開いて、SSMを使ったポートフォワードを起動する
# portNumberは前のncコマンドで指定した1234と合わせること
aws ssm start-session --target i-1234567890 --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["1234"],"localPortNumber":["1234"]}'
# また新しいローカルシェルを開いて、EC2から送られてきているデータを受信する
nc -w 3 127.0.0.1 1234 > output.txt
# 最初のシェルに戻ってncコマンドをCtrl-cで止める
# ホームディレクトリにoutput.txtができあがっている
ls ~/
Discussion