Amazon EC2 Instance Connect を使用した SSH 接続の確立
Amazon EC2 インスタンスを実行する際は、その管理が必要です。リモートにある Linux マシンを管理する従来の方法は、SSH 経由で Linux に接続し、必要なコマンドを実行したり、設定ファイルを編集したりすることです。ユーザーは、ユーザー名とパスワード、またはユーザー名とセキュリティキーを使用して、SSH 経由で Linux にログインできます。 ただし、EC2インスタンスにSSHで接続する場合、ユーザーはユーザー名とセキュリティキーのみを使用できます。これは、セキュリティ強化のため、AWS EC2で設定されているポリシーです。このブログ記事では、WindowsおよびLinuxを実行しているマシンから、Linuxを実行しているAWSインスタンスにSSHで接続する方法について説明します。
AWSからキーをダウンロードする
AWS Management Console のウィザードを使用して新しい EC2 インスタンスを作成すると、EC2 インスタンスの作成プロセスの最後にキーペアが生成されます。キーペアは、秘密鍵と公開鍵で構成されます。Secure Shell (SSH) は暗号化プロトコルであり、このキーペアを使用して接続を非対称暗号化します。 公開鍵は秘密鍵を使用して生成できます。Amazon EC2インスタンス用にキーペアが生成されると、公開鍵はEC2インスタンスにインストールされたLinuxの設定に保存され、秘密鍵はユーザーによってダウンロードされます。
Amazon EC2インスタンスの作成プロセスの最終ステップで秘密鍵をダウンロードし、安全な場所に保存する必要があります。 秘密鍵をダウンロードするまで、EC2インスタンスは作成されません。秘密鍵はPEMファイル形式で提供されます。現在のAWS EC2インスタンスの鍵をダウンロードできるのは、この時のみであることに留意してください。
秘密鍵をダウンロードし、その鍵を blog01-key.pem ファイル。
CSSH経由でEC2インスタンスに接続する PuTTYの使用方法
PuTTYは、無料で利用できるSSHクライアントです。 インストール Windowsの場合。SSH経由でAWSに接続するには、ダウンロードしたPEMファイルを、PuTTYがサポートするPPKファイル形式に変換する必要があります。そのため、PuTTYの単一インストールファイルから一緒にインストールされる"PuTTY Key Generator(PuTTYgen)"ユーティリティを使用する必要があります。また、以下からダウンロードすることもできます puttygen.exe 手動で。PuTTYgenはRSAおよびDSA鍵の生成に使用されます。
その結果、EC2インスタンスに接続する予定のWindowsマシンには、以下の3つのファイルがあります:
blog01-key.pem
putty.exe
puttygen.exe
これらのファイルは次の場所にあります “C:AWS SSH” この例では。
をクリックして、PuTTY Key Generator(PuTTYgen)を開きます puttygen.exe ファイル、またはそのファイルへのショートカット。
クリック Load PuTTYgenウィンドウで。
"すべてのファイルを選択"をクリック(*.*) をクリックして、PEM ファイルを参照します。そこで、 “C:AWS SSHblog01-key.pem“. 次に、[クリック] Open.
表示された通知を読み、 OK.
これで、PuTTYgenのウィンドウに公開鍵の文字列が表示されるはずです。以下のスクリーンショットに示されている設定を使用してください。
生成する鍵の種類: RSA
生成された鍵のビット数: 2048 bit
クリック Save private key.
このキーを、保護用のパスフレーズなしで保存してもよろしいですか?
ヒット Yes 同意される場合は、そのまま進めてください。同意されない場合は、戻ってパスフレーズで鍵を保護してください。
秘密鍵を安全な場所に保存してください。私はその鍵を “C:AWS SSHAWS EC2 SSH.ppk“. ヒット Save.
HEC2インスタンスへのSSH接続方法 Windowsから
AWS EC2インスタンスのパブリックIPアドレスを確認してください。パブリックIPアドレスを取得するには、インスタンスが"実行中"の状態である必要があります。私の場合、パブリックIPアドレスは 52.55.222.44このIPアドレスを使用して、SSH経由でAWSに接続します。
WindowsでPuTTYを開きます。実行します putty.exe または、対応するショートカット。
へ移動 SSH > Auth.
クリック Browse そして、PPKファイル(秘密鍵)を選択します。私は “C:AWS SSHAWS EC2 SSH.ppk” 先ほどPuTTYgenで生成したファイル。
戻る Session PuTTYの画面で、EC2インスタンスのパブリックIPアドレスを ホスト名 (またはIPアドレス) フィールド。接続タイプが SSH。入力します 52.55.222.44(これはEC2管理コンソールからコピーした、私のEC2インスタンスのIPアドレスです)。TCPポート22が選択されています。[実行]をクリックします Open.
セキュリティ警告が表示されます。メッセージを確認し、 Accept EC2インスタンスへの接続を続行するには、このダイアログが表示されます。このダイアログは、特定のリモートマシンに初めて接続する際に表示されます。メッセージに表示されるフィンガープリントは、EC2インスタンスのフィンガープリントと一致している必要があります。
コンソールウィンドウにユーザー名を入力してください。私のEC2インスタンスではUbuntu Linuxを使用しているため、 ubuntu, これは、適切なAmazon Machine Image(AMI)からデプロイされたこのインスタンスに対して設定されているデフォルトのユーザー名です。
AWSにおける各種Linux AMIのデフォルトユーザー名:
- Amazon Linux 2 または Amazon Linux AMI: ec2-user
- CentOS: CentOS または ec2-user
- Debian: 管理者
- Fedora: フェドーラ または ec2-user
- Red Hat Enterprise Linux (RHEL): ec2-user または ルート
- SUSE: ec2-user または ルート
- Ubuntu: Ubuntu
- オラクル: ec2-user
- Bitnami: Bitnami
Linuxシェル(この場合はbash)のコマンドプロンプトが表示されれば、AWS上で稼働しているリモートLinuxマシンでコマンドを実行できるようになります。これは、PuTTYでAWS EC2のSSH設定が正しく行われていることを意味します。
SSH経由でAmazon EC2インスタンスにファイルを転送する
EC2インスタンスへのAWSリモートSSHアクセスを設定したので、SSH経由でAWSインスタンスに接続し、コマンドの実行や設定の編集などが可能になりました。ただし、WindowsマシンからAWSインスタンスへ、あるいはその逆方向に、SSH経由でファイルを転送する必要が生じる場合もあります。 SSHを介してマシン間でファイルを安全に転送するためのファイル転送プロトコルとして、Secure File Transfer Protocol (SFTP) や Secure Copy Protocol (SCP) などがあります。
WindowsからAWSインスタンスへSSH経由でファイルを転送するには、以下の方法を使用できます。 WinSCPこれはWindows用の無料ツールです。なお、 scp AWS上で稼働しているリモートLinuxマシンにインストールする必要があります。
WindowsマシンにWinSCPをインストールしたら、アプリケーションを実行します。
選択 SFTP ファイルプロトコルとして、そして ホスト名 フィールドに、SSH経由で接続してファイルを転送したいEC2インスタンスのパブリックIPアドレスを入力します。EC2インスタンスのユーザー名を入力します。私は 52.55.222.44 IPアドレスとして、および Ubuntu 私の例では、ユーザー名としてこれを使います。
クリック Advanced WinSCPのメインウィンドウで。
移動 SSH > Authentication ~の中で 詳細なサイト設定 ウィンドウ。クリック … ~の中で 認証パラメータ セクションで、PuTTYgenで事前に生成した秘密鍵を選択します。私の場合は、 “C:AWS SSHAWS EC2 SSH.ppk“. ヒット OK 設定を保存して、WinSCPのメインウィンドウに戻ります。
クリック Login WinSCPのメインウィンドウで。
PuTTYからEC2インスタンスに初めて接続したときと同様に、警告メッセージが表示されます。 Yes 続きを読む。
AWS EC2のSSH設定が正しく行われており、WinSCPでSSH接続パラメータの設定が正常に完了していれば、コマンドスタイルの2ペイン構成のウィンドウが表示されます。左ペインにはローカルのWindowsマシンのユーザーフォルダが、右ペインにはAWS上で動作しているLinuxのホームフォルダが表示されます。ファイルを一方のペインからもう一方のペインへドラッグ&ドロップしたり、ローカルおよびリモートマシン上のファイルのコピー、名前の変更、削除を行うことができます。
LinuxからSSH経由でAWSに接続する
Windowsとは異なり、Linuxには標準でSSHクライアントが搭載されています。ローカルのLinuxマシンのコンソールで、次のようなコマンドを使用して、Linuxを実行しているAWS EC2インスタンスにSSHで接続します:
ssh -i file_name.pem ubuntu@ip_address
秘密鍵が保存されているディレクトリに移動してください .pem ファイルはLinuxマシン上にあります。この例ではUbuntuを使用しており、私は blog01-key.pem ファイルを ~/ダウンロード/.
cd ~/Downloads/
ssh -i blog01-key.pem ubuntu@52.55.222.44
どこ Ubuntu はリモートLinuxマシン上のユーザー名であり、 52.55.222.44 は、リモートにあるLinuxマシンのIPアドレスです。
今すぐこのコマンドを実行すると、次のようなエラーが表示されます:
警告:保護されていない秘密鍵ファイルです。
"blog01-key.pem"の権限が緩すぎます。
秘密鍵は他人がアクセスできないようにする必要があります。
この秘密鍵は無視されます。鍵を読み込みます:pad 権限。
アクセスが拒否されました(公開鍵).
セキュリティ上の理由から、より低い(より厳格な)権限を設定する必要があります。
chmod 400 ./blog-key.pem
使用 400 そのキーを自分だけが読み取れるようにする必要がある場合。
の使用 600 自分自身がキーを読み書きできるようにする必要がある場合。
これで、Linuxマシンから次のコマンドを使用して、SSH経由でAWS EC2インスタンスに接続できるようになります:
ssh -i blog01-key.pem ubuntu@52.55.222.44
現在、Amazon EC2インスタンスにSSHで接続しています。
LinuxでSSH経由でAmazon EC2にファイルを転送する
LinuxでSCPを使用すれば、SSH経由でAWSインスタンスにファイルを転送することもできます。まず、ローカルのLinuxマシンからリモートのLinuxインスタンスへのAWS SSH接続が確立されていることを確認してください。その後、ローカルのLinuxマシンで新しいコンソールを開き、次のようなコマンドを使用してEC2インスタンスに接続します:
scp -i /path/key_name.pem /path/file_name.txt user_name@ec2_instance_IP_address:/path_to_file
この例では、次のコマンドを使用しています:
scp -i ~/Downloads/blog01-key.pem ~/Downloads/file.txt ubuntu@52.55.222.44:/home/ubuntu
SSH経由でのAWSインスタンスへのファイル転送が正常に完了しました。
ファイルを逆方向(AWS EC2上のLinuxからローカルのLinuxマシンへ)にコピーするには、次のようなコマンドを使用します:
scp -i /path/key_name.pem user_name@ec2_instance_IP_address:/path_to_file/my-file.txt path/my-file2.txt
私の場合は、次のコマンドを使っています:
scp -i ~/Downloads/blog01-key.pem ubuntu@52.55.222.44:/home/ubuntu/file1.txt ~/Downloads/file1-copy.txt
スクリーンショットにあるように、ファイルは正常にコピーされました。Amazon EC2インスタンスから必要なローカルコンピュータへ重要なファイルをコピーし、バックアップをとることができます。実行 AWS EC2のバックアップ データの損失を防ぐため、定期的に。
AWSインスタンスに新しいキーを追加する方法
AWS EC2インスタンスを作成した後、SSH経由でAWSインスタンスに接続するために、既存のEC2インスタンスに対して追加のキーペアを作成できます。 他のユーザーに EC2 インスタンスへの SSH アクセスを提供するために、これを行う必要がある場合があります。ユーザーが AWS インスタンスに SSH 経由で接続する必要がないと判断した場合は、インスタンス作成時に生成されたキーの代わりに新しいキーを再作成することなく、AWS EC2 で実行されている Linux マシンから公開鍵を削除できます。
AWS Management Console で EC2 Management Console を開きます。
次の場所に移動します。 Network & Security ナビゲーションペインで、[クリック] Key Pairs.
このページには、既存のすべてのキーペアが表示されます。検索フィールドに既存のキーペア名の一部を入力して、そのキーペアを検索することができます。
をクリックして Create key pair Webインターフェースの右上にあるボタンをクリックして、既存のEC2インスタンス用に新しいキーペアを作成します。
選択 .pem LinuxでOpenSSHを使用して鍵を使用する場合は"秘密鍵の形式"として、WindowsでPuTTYを使用して鍵を使用する場合は".ppk"を選択してください。私はローカルのLinuxマシンから新しい鍵を使用してSSH経由でAWS EC2インスタンスに接続する予定なので、 .pem キーオプション。必要に応じてタグを追加できます。クリック Create key pair 準備ができたら、続行してください。
ダウンロードしたファイルは安全な場所に保存してください。私の場合、ダウンロードしたファイルの名前は blog02-temp.pem そして、このファイルを ダウンロード ホームディレクトリ内のディレクトリ。
新しい鍵ペアから公開鍵を取得する
AWS Management ConsoleのWebインターフェースで新しい鍵ペアを生成しました。次に、ダウンロードした秘密鍵を使用して公開鍵を生成する必要があります。 .pem ファイル。
以下の形式のコマンドを使用してください:
ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem
私の場合、コマンドは次のとおりです:
ssh-keygen -y -f ~/Downloads/blog02-temp.pem
エラーが発生した場合は、適切な権限を設定してください:
chmod 400 ~/Downloads/blog02-temp.pem
すべてが正しければ、生成された公開鍵がコンソールに出力されます。
生成されたキー文字列をコピーし、この情報を安全な場所に保存してください。この例では、キー文字列をテキストファイルに保存します。
キー文字列をクリップボードにコピーします。
この記事の前半で説明したように、ローカルのLinuxマシンからSSH経由でEC2インスタンスに接続します。
私たちは /home/Ubuntu/ 今すぐ。
SSH経由でEC2インスタンスにアクセスするための公開鍵が保存されている設定ファイルをテキストエディタで開きます:
nano ~/.ssh/authorized_keys
この設定ファイルへのフルパスは、使用するLinux Amazon Machine Image (AMI) によって異なり、次のような形式になります:
/home/ubuntu/.ssh/authorized_keys
/home/ec2-user/.ssh/authorized_keys
/root/.ssh/authorized_keys
クリップボードからキーをコピーし、この設定ファイルの2行目に貼り付けてください。
変更を保存してファイルを閉じてください。
EC2インスタンスへの接続に使用している現在のSSHセッションが実行されているコンソール(ターミナル)は、追加した2つ目のキーが正常に機能することを確認するまで閉じないでください。そうしないと、設定が間違っている場合にSSH接続が切断され、AWSインスタンスにSSH経由で接続できなくなる可能性があります。万が一のミスでアクセスできなくなる事態を避けるためです!
ローカルのLinuxマシンで別のターミナルを開き、新しいキーを使用してインスタンスへの接続を試みてください。 私は、私の .pem キーファイルが保存されている場所。
cd ~/Downloads/
新しいコンソールで、ローカルのLinuxマシンからAWS上のLinuxを実行しているEC2インスタンスに接続するには、新しい秘密鍵を定義して(blog02-temp.pem (この場合)。
ssh -i blog02-temp.pem ubuntu@52.55.222.44
新しい鍵を使用してAWSへのSSH接続が正常に確立されました。これで、新しい鍵を送信できます(blog02-temp.pem) を、AWS SSH接続を確立する必要があるユーザーに割り当てます。このユーザーに対するAWS EC2インスタンスへのSSHアクセスを無効にする必要がある場合は、 .ssh/authorized_keys AWS EC2 で実行中のリモート Linux インスタンス上で。EC2 インスタンスの作成時に生成された最初の鍵と、別のユーザーが AWS EC2 に接続するために以前に作成した 2 つ目の鍵の両方を使用した AWS SSH 設定が正常に機能しているため、SSH ターミナルウィンドウを閉じることができます。
もし鍵ペアを削除すると Network & Security > Key pairs EC2管理コンソール(AWS管理コンソールのWebインターフェースで2つ目のキーを作成した場所)からは、その特定のEC2インスタンス内のキーは削除されません。
AWS EC2のSSHキーを紛失した場合の対処法
AWS EC2インスタンスへの接続用秘密鍵(新しいEC2インスタンスの作成時に生成されたもの)を紛失した場合、そのインスタンスには接続できなくなります。新しい鍵を生成し、現在のEC2インスタンスのAWS SSH設定ファイルにその鍵を追加することはできません。このような状況では、SSH接続が可能な一時的なEC2インスタンスを使用することができます。以下の手順に従って、そのインスタンスへのAWS EC2 SSHアクセスを復元してください。
- 紛失したAWS SSH秘密鍵が紐付けられている元のEC2インスタンスを停止してください。
- EC2インスタンスにアタッチされているEBSボリュームに関する情報を確認してください。Linuxにマウントされているルート(/)ボリュームを含むEBSボリュームを特定する必要があります。このEBSボリュームのボリュームIDをメモしておいてください。
- AWS EC2で一時的なインスタンスを起動します。元のマシンにインストールされているものと同じLinuxディストリビューション(同じタイプのAMI)を実行しているインスタンスを使用できます。
- AWS Management Console で、AWS に接続するための新しい鍵ペアを生成します。秘密鍵を保存し、公開鍵を用意してください。元のインスタンスで使用されていたルートボリュームに保存されている AWS SSH 設定を修復するには、公開鍵の鍵文字列を生成する必要があります。
- 一時的なEC2インスタンス上で動作するLinuxにディレクトリを作成し、元のEC2インスタンスのルート(/)パーティションを含むEBSボリュームを一時的なEC2インスタンスにマウントします。事前に確認しておいたボリュームIDを使用して、必要なEBSボリュームを特定してください。
- AWSのSSHキー設定ファイル(/home/Ubuntu/.ssh/authorized_keys などのディレクトリにあるもの)を開きます。パスは、元のEC2インスタンスのルートパーティションをマウントしたディレクトリによって異なります。新しい公開鍵のキー文字列を、AWSのSSHキー設定ファイルに追加してください。
- 一時的なEC2インスタンスにアタッチされている、元のEC2インスタンスで使用されていたEBSボリュームをアンマウントします。
- 編集したAWS SSHキー設定ファイルが含まれるEBSボリュームを、元のEC2インスタンスにマウントし直します。
- 元のEC2インスタンスを起動し、新しいキーペアを使用してSSH経由でこのインスタンスに接続します。
EC2 Instance Connect の使用
AWSの管理において、キー管理は重要な要素です。これは、EC2インスタンスにアクセスするためのAWS EC2 SSHキーを安全な場所に保管し、紛失を防ぐ必要があるためです。 ユーザー数が多くなると、他のユーザーが一時的にアクセスするために必要なキーの作成や削除は、日常的な作業になりがちです。そのため、AmazonはEC2 Instance Connectを使用してSSH経由でAWS EC2インスタンスに接続する機能を提供しています。この機能により、AWSインスタンスへの接続に関するSSHキー管理を自動化できます。
EC2 Instance Connectを使用する考え方は、Identityを作成することです & SSHキーを手動で管理(作成、共有、削除)する必要なく、EC2インスタンスへのAWS SSHアクセスを一元的に制御するためのアクセス管理(IAM)ポリシー。 最後に、ユーザーはSSHクライアント、AWS EC2コンソールのブラウザベースのクライアント、またはAmazon EC2 Instance Connect CLIを使用して、AWS EC2インスタンスに接続できます。
Amazon Instance Connect APIは、60秒間有効な1回限りの公開SSHキーをインスタンスのメタデータにプッシュします。 IAM ユーザーに関連付けられた IAM ポリシーによって、ユーザーへのアクセスが許可されます。ユーザーは、60 秒以内にこの鍵を使用して EC2 インスタンスに接続する必要があります。鍵の有効期限が切れた後は、新しい鍵を使用する必要があります。
Amazon Instance Connect は、Ubuntu 16(またはそれ以降)および Amazon Linux 2 がインストールされている EC2 インスタンスでサポートされています。Amazon Instance Connect は、EC2 Linux インスタンスにインストールされている必要があります。 もう 1 つの前提条件として、AWS 上で実行されているリモート Linux マシンに AWS CLI がインストールされている必要があります。
インストール後、EC2 Instance Connect は、SSH サーバーデーモンの設定ファイル (/etc/ssh/sshd_config) に以下のパラメータを書き込むスクリプトを実行します。
AuthorizedKeysCommand
認証済みキーのコマンドユーザー
更新された AuthorizedKeysCommand この設定は、EC2インスタンスのメタデータからAWS EC2の公開SSHキーを読み取るために使用されます。これらのパラメータに対してすでにカスタム値が入力されている場合、Instance Connectはそれらを更新(上書き)しませんが、その場合はこの機能を利用できません。
JSON形式の設定ファイルを作成する必要があります。開いてください IAMコンソール、次に"ポリシー"に移動し、"ポリシーの作成"をクリックします。あるいは、AWS CLIがインストールされたLinuxマシンでコマンドラインインターフェースを使用することもできます。設定例を以下に示します。このポリシーでは、インスタンスIDによってインスタンスを識別し、アクセスを許可することができます。
{
"Version": "2021-10-17",
"Statcodeent": [
{
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": [
"arn:aws:ec2:region:account-id:instance/i-00000000000000000",
"arn:aws:ec2:region:account-id:instance/i-00000000000000001"
],
"Condition": {
"StringEquals": {
"ec2:osuser": "ami-username"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
}
次に、ポリシーを有効にする必要があります。ポリシーを有効にするためのAWS CLIコマンドは、次のような形式になります:
aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
有効化されたポリシーを該当するユーザーに割り当てることができます。
aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name
AmazonのEC2インスタンスに接続するには EC2コンソール、必要なEC2インスタンスを選択し、 Connect ボタン。その インスタンスに接続する ページで、[ EC2 Instance Connect tab そしてクリック Connect.
結論
SSH 経由で AWS EC2 インスタンスに接続することは、AWS EC2 の管理プロセスにおいて重要な要素です。このブログ記事では、AWS EC2 の SSH 設定を行う方法、およびローカルの Linux や Windows マシンから Linux を実行している AWS EC2 インスタンスに接続する方法について説明しました。EC2 インスタンスとの SSH 接続を確立するには、鍵ペアを使用する必要があります。 公開鍵はAWS EC2上で動作するLinuxの設定に保存され、秘密鍵はユーザーのマシンにインストールされたローカルSSHクライアントで使用されます。データ、時間、コストの損失を防ぐため、鍵は安全な場所に保管し、定期的にバックアップを作成してください。






























