SSH を開かずに EC2 でコマンドを実行するにはどうすればよいでしょうか?
AWS Systems Managerを使用してEC2インスタンスでリモートコマンドを実行する1つの方法 安全、 スケーラブル EC2インスタンスでコマンドを実行するためにSSHポートを開く必要もありません。このガイドでは、サイト管理者、DevOps、ネットワークエンジニア向けに、ステップバイステップの実装手順、前提条件、AWS CLIコマンドのサンプル、IAM設定、そして実用的なセキュリティのヒントを紹介します。.
前提条件と全体的なアーキテクチャ
EC2 でコマンドをリモートで実行できるようにするには、次の 3 つの主要コンポーネントが必要です。
- SSM エージェントが EC2 にインストールされ、実行されています。.
- EC2には、Systems Managerに登録して通信するために必要な最小限のポリシーを備えたIAMインスタンスプロファイルがあります(AmazonSSMマネージドインスタンスコア).
- SSM サービスへのネットワーク接続 (SSM/EC2Messages/SSM-SessionManager のインターネットまたは VPC エンドポイント経由)。.
建築: AWS コンソールまたは AWS CLI/SDK コマンドからのユーザーまたはスクリプト 実行コマンド または セッション開始 呼び出し → Systems Manager が EC2 上の SSM エージェントにメッセージを送信 → エージェントがコマンドを実行し、出力を CloudWatch/S3 または呼び出しの結果に返します。.
ネットワークアクセスに関する注意事項
EC2がNATのないプライベートサブネット上にある場合は、 VPCエンドポイント のために com.amazonaws。 .ssm, ec2メッセージ, ssmメッセージ そして s3 使用。.
必要なIAMロールとポリシーの設定
EC2 用の IAM ロールを作成し、AWS 管理ポリシーをアタッチします。
信頼ポリシー(EC2 の信頼エンティティ):
{
"Version":"2012-10-17",
"Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]
}管理ポリシーを添付します: AmazonSSMマネージドインスタンスコア
aws iam create-role --role-name SSMInstanceRole --assume-role-policy-document file://trust-policy.json
aws iam attach-role-policy --role-name SSMInstanceRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCoreこのポリシーには、SSMへのログの登録と送信に必要な権限が含まれています。出力をS3に保存したり、KMSを使用して暗号化したりするには、S3バケットへの書き込み権限とKMSキーを使用する権限も追加する必要があります。.
次に、このロールをインスタンス プロファイルに変換し、EC2 に接続します。.
一般的な Linux ディストリビューションへの SSM エージェントのインストールと確認
Amazon Linux 2 の場合:
sudo yum install -y amazon-ssm-agent
sudo systemctl enable --now amazon-ssm-agentUbuntuの場合(Debianパッケージのダウンロードの例):
REGION=us-east-1
wget https://s3.${REGION}.amazonaws.com/amazon-ssm-${REGION}/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable --now amazon-ssm-agentステータスを確認します:
sudo systemctl status amazon-ssm-agent
sudo tail -n 200 /var/log/amazon/ssm/amazon-ssm-agent.log
Run Command でコマンドを実行する (aws cli の例)
1 つ以上の EC2 インスタンスでシェル コマンドを実行する簡単な方法:
例: インスタンスで apt update と upgrade を実行する:
aws ssm send-command \
--instance-ids "i-0123456789abcdef0" \
--document-name "AWS-RunShellScript" \
--parameters commands=["sudo apt-get update -y","sudo apt-get upgrade -y"] \
--comment "Update packages" \
--region us-east-1タグでターゲットを設定するには(例:Role=web タグを持つすべての Web サーバー):
aws ssm send-command \
--targets Key=tag:Role,Values=web \
--document-name "AWS-RunShellScript" \
--parameters commands=["/opt/deploy/deploy.sh"] \
--region eu-central-1コマンドの出力を取得します。
1) send-command の出力で CommandId を取得します。.
2)
aws ssm get-command-invocation --command-id <COMMAND_ID> --instance-id i-0123456789abcdef0出力がS3に送信される場合、送信コマンドパラメータを次のように設定します。 --output-s3-bucket-name そして --output-s3-key-prefix 特定。.
大規模なスクリプトを実行するための実用的なヒント
- スクリプトをS3にアップロードし、実行コマンドで wget + 実行します。.
- 定期的なスクリプトの場合 州マネージャー 使用。.
- 完全な自動化のために、SSM 管理パラメータとドキュメント (自動化ドキュメント) を使用します。.
セッションマネージャを使用したインタラクティブアクセスとポート転送
セッション マネージャーは、SSH なしで対話型シェルを可能にし、ポート転送も実行できます。.
対話型セッションの開始:
aws ssm start-session --target i-0123456789abcdef0コンソールまたは AWS CLI 経由で対話的に使用するにはインストールが必要です セッションマネージャープラグイン クライアント上に存在します。.
データベースアクセスのためのポート転送の例:
aws ssm start-session \
--target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["3306"],"localPortNumber":["3307"]}'その後、 ローカルホスト:3307 接続すると、ポート 3306 をインターネットに開かずに、トラフィックが SSM を介してトンネリングされます。.
出力とログを管理する(CloudWatch / S3)
セッション マネージャーの設定で、CloudWatch ログまたは S3 ログを有効にしてすべてのセッションを保存します。.
実行コマンドの場合、出力を S3 にリダイレクトするか、CloudWatch 出力を有効にすることができます。
--cloud-watch-output-config '{"CloudWatchOutputEnabled":true}'
実践的なシナリオと例
複数のリージョンにわたる数十の EC2 インスタンスに対して一括更新を実行します。
- タグまたはリソース グループによるターゲティングを使用します。.
- スケジュールと調整には、SSM メンテナンス ウィンドウまたは Patch Manager を使用します。.
GPU およびレンダリング サーバーに使用します。
複数の場所(例:85以上の拠点またはAWSリージョン)に展開されているGPUサーバーの場合は、Run Commandを使用してNVIDIAドライバー、CUDA、および依存パッケージをインストールします。例:
aws ssm send-command --instance-ids "i-..." --document-name "AWS-RunShellScript" --parameters commands=["sudo apt-get install -y nvidia-driver-470","sudo reboot"]最小限の遅延でトレーディング VPS を素早くセットアップ:
- SSH/22 を開く代わりに、セッション マネージャーとポート フォワーディングを使用して、取引サーバーに安全にアクセスします。.
- 適切な場所(ブローカーへの直接パスを持つ最も近いデータセンター)を選択し、CDN/BGP/プライベートネットワークを使用すると、pingを削減できます。 85以上の拠点 私たちは世界中でこれらのニーズに応えています。.
セキュリティのヒントとベストプラクティス
SSH ポートを決して公開しないでください。SSM は低リスクの代替手段として機能します。.
- から 最小権限 IAMロールとユーザーを使用します。特定のドキュメントの実行またはパラメータへのアクセスのみを許可します。.
- セッション マネージャーのログ記録を有効にし、KMS 暗号化または CloudWatch を使用して出力を S3 に送信します。.
- パラメータストアのタイプ セキュアストリング 専用の KMS キーを使用します。.
- セッション マネージャーの制限: スケジュールと IAM ポリシーを、一定期間のみ、または MFA を使用して実行するように設定できます。.
- 機密性の高い環境では、SSM と強力なネットワーク ACL およびセキュリティ グループに VPC エンドポイントを活用します。.
よくあるエラーとトラブルシューティング
- インスタンスが管理されていない / 登録されていない: SSM エージェントがインストールされ、実行されており、正しい IAM ロールがアタッチされていることを確認します。.
- 接続がタイムアウトしました: ネットワーク ルーティング、VPC エンドポイント、またはインターネット アクセス/NAT を確認します。.
- S3 に出力を送信するときにアクセスが拒否されました: IAM ロールには、そのバケットへの書き込みアクセス権が必要です。.
- start-session でエラーが発生します: クライアントに session-manager-plugin がインストールされており、コンソールでセッション マネージャーが有効になっていることを確認します。.
サービス概要と利用方法
AWS Systems Manager を使用して EC2 インスタンスでコマンドをリモートで実行すると、EC2 をリモートで管理し、スクリプトやパッチを実行したり、SSH を使用せずにアクセスしたりするための安全で便利な方法になります。.
このソリューションは、次のようなニーズに最適です。
- AIとレンダリング用のグラフィックサーバー(GPU)
- 低いping要件を備えた取引用VPS、
- 高いSLAを備えたゲームサーバーとインフラストラクチャ、
組み合わせも可能です。AWS EC2と当社の海外サーバー(85か所以上)を組み合わせて管理する必要がある場合は、以下のサービスをご利用いただけます。
- レイテンシの影響を受けやすいワークロードの場合は、最も近い場所を選択してください。.
- BGP/CDN と専用リンク (必要な場合) を使用します。.
- SSM + Automation ドキュメントを使用して、オンプレミス/AWS/VPS 環境間の管理と自動化を行い、ログを CloudWatch/S3 に集中管理します。.
始めるための推奨手順
取引用のクラウドサーバー、GPU クラウド、VPS プランを確認したり、AWS Systems Manager を使用した最適な場所の選択や安全な実装に関する技術的なアドバイスが必要な場合は、プランを確認するか、サポートチームに問い合わせて、プロジェクト用のカスタムの安全なアーキテクチャを設計してください。.









