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 手動で。RSAおよびDSA鍵の生成にはPuTTYgenを使用します。
その結果、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: admin
- Fedora: fedora または ec2-user
- Red Hat Enterprise Linux (RHEL): ec2-user または ルート
- SUSE: ec2-user または ルート
- Ubuntu: ubuntu
- Oracle: 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インスタンスに初めて接続したときと同様に、警告メッセージが表示されます。”Enter”キーを押してください。 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接続が切断され、SSH経由でAWSインスタンスに接続できなくなる可能性があります。万が一のミスでアクセスできなくなる事態を避けるため、ご注意ください!
ローカルの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を利用する考え方は、SSHキーを手動で管理(作成、共有、削除)する必要なく、Identity and Access Management(IAM)ポリシーを作成して、EC2インスタンスへのAWS SSHアクセスを一元的に制御することにあります。 最後に、ユーザーは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 がインストールされている必要があります。
インストール後、Amazon Instance Connect は、SSH サーバーデーモンの設定ファイル (/etc/ssh/sshd_config) に以下のパラメータを書き込むスクリプトを実行します。
AuthorizedKeysCommand
AuthorizedKeysCommandUser
更新された 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クライアントで使用されます。データ、時間、コストの損失を防ぐため、鍵は安全な場所に保管し、定期的にバックアップを作成してください。






























