EC2インスタンス間パスワードなしで、SSH接続してみる。

EC2インスタンス間パスワードなしで、SSH接続する方法を整理してみました。
2023.08.02

こんにちは、クラスメソッドのキム・ジェウク(Kim Jaewook)です。

今回は、EC2インスタンス間パスワードなしで、SSH接続する方法を整理してみました。

やりたいこと

  • 「EC2 Instance A」から「EC2 Instance B」にSSH接続をしたい。
    • 接続としては、パスワード認証なしで、接続したい。
  • Defaultユーザーのec2-userだけでなく、Linux環境で作ったユーザーも接続を行いたい。

ssh-keygenを利用し、SSH接続

まずは、Defaultで設定されているec2-userで、「EC2 Instance B」に接続してみます。

接続方法としては、ssh-keygenを利用し、公開鍵と秘密鍵を作成する予定です。

[ec2-user@ip-10-0-9-109 ~]$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.

「EC2 Instance A」に接続し、ssh-keygenコマンドで、公開鍵と秘密鍵を作成します。

「ssh/id_rsa」キーを保存したいディレクトリを入力し、パスワードを入力します。

※ パスワードをスキップすると鍵を使う時にパスワードを問いません。

※ ディレクトリもスキップするとDefaultである「/home/ユーザー名/.ssh/id_rsa.」に保存されます。

[ec2-user@ip-10-0-9-109 ~]$ cd .ssh
[ec2-user@ip-10-0-9-109 .ssh]$ ls
authorized_keys id_rsa id_rsa.pub

[ec2-user@ip-10-0-9-109 .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzxxxxxxxxxfuAvbn6N5ak/Hqn3zYrNf+oy5vLTEbt4/0i8= ec2-user@ip-10-0-9-109.ap-northeast-1.compute.internal

上記のコマンドを実行すれば、「.ssh」パスに公開鍵と秘密鍵が作成されたことが確認できます。

ここで、作成したid_rsa.pub(公開鍵)を「EC2 Instance B」にコピーすることで、パスワードなしで接続することができます。

※ catコマンドで表示されたid_rsa.pub(公開鍵)情報をコピーしておきます。


[ec2-user@ip-10-0-1-86 ~]$ cd .ssh
[ec2-user@ip-10-0-1-86 .ssh]$ ls
authorized_keys

[ec2-user@ip-10-0-1-86 .ssh]$ vi authorized_keys

「EC2 Instance B」に接続した後、「.ssh」パスで「authorized_keys」ファイルを確認します。

※ authorized_keysの中身にコピーした「EC2 Instance A」のid_rsa.pub(公開鍵)を入れます。

id_rsa.pub(公開鍵)を入れておきます。

※ すでに記載されている ssh-rsaは、EC2インスタンスを作成するとき設定したキーペアの情報になります。


[ec2-user@ip-10-0-1-86 .ssh]$ chmod 600 authorized_keys

最後にauthorized_keysに権限を与えます。

[ec2-user@ip-10-0-9-109 .ssh]$ ssh 10.0.1.86
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.1.86' (ECDSA) to the list of known hosts.

Last login: Wed Aug 2 03:38:16 2023 from 118.91.37.54
[ec2-user@ip-10-0-1-86 ~]$

設定は終わりましたので、「EC2 Instance A」に戻って接続を試しますとパスワードなしでSSH接続ができました。

  • ssh Private IP(EC2 Instance B)

EC2 Instance Bにユーザーを作成


[ec2-user@ip-10-0-1-86 .ssh]$ sudo adduser newuser
[ec2-user@ip-10-0-1-86 .ssh]$ sudo su - newuser
[newuser@ip-10-0-1-86 ~]$ mkdir .ssh
[newuser@ip-10-0-1-86 ~]$ chmod 700 .ssh

「EC2 Instance B」に「newuser」を作成します。

そして、.sshを作って、権限を与えます。

[newuser@ip-10-0-1-86 ~]$ cd .ssh
[newuser@ip-10-0-1-86 .ssh]$ vi authorized_keys
[newuser@ip-10-0-1-86 .ssh]$ chmod 600 authorized_keys

その後、先と同じくauthorized_keysにid_rsa.pub(公開鍵)を入れた後、権限を与えます。

[ec2-user@ip-10-0-9-109 .ssh]$ ssh newuser@10.0.1.86
Last login: Wed Aug 2 04:09:20 2023
[newuser@ip-10-0-1-86 ~]$

「EC2 Instance A」に戻って接続を試してみるとパスワードなしでSSH接続ができます。

  • ssh ユーザー名@Private IP(EC2 Instance B)

EC2 Instance Aにユーザーを作成


[ec2-user@ip-10-0-9-109 ~]$ sudo adduser newuser
[ec2-user@ip-10-0-9-109 ~]$ sudo su - newuser
[newuser@ip-10-0-9-109 ~]$ mkdir .ssh
[newuser@ip-10-0-9-109 ~]$ chmod 700 .ssh

「EC2 Instance A」に「newuserA」を作成します。

以前、作成したec2-userの公開鍵と秘密鍵を含め4つのファイルを「/home/newuserA/.ssh/」にコピーします。

  • authorized_keys

  • id_rsa
  • id_rsa.pub
  • known_hosts

※ cpコマンドもしくは手動でコピーしても問題ございません。

[newuserA@ip-10-0-9-109 .ssh]$ chmod 600 authorized_keys
ssh -i "ec2-key.pem" newuserA@ec2-13-231-198-118.ap-northeast-1.compute.amazonaws.com
Last login: Wed Aug 2 04:34:15 2023
[newuserA@ip-10-0-9-109 ~]$

Macなどの外部環境から「newuserA」にすぐSSH接続することができます。

[newuserA@ip-10-0-9-109 .ssh]$ chmod 600 id_rsa
[newuserA@ip-10-0-9-109 .ssh]$ ssh newuser@10.0.1.86
Last login: Wed Aug 2 04:15:42 2023 from 10.0.9.109
[newuser@ip-10-0-1-86 ~]$ exit

[newuserA@ip-10-0-9-109 .ssh]$ ssh ec2-user@10.0.1.86
Last login: Wed Aug 2 04:53:03 2023 from 118.91.37.54
[ec2-user@ip-10-0-1-86 ~]$

最後に「id_rsa」に権限を与えた後、 SSH接続を試すと「EC2 Instance B」のnewuserに問題なく接続できます。

他、作成したユーザーで、「EC2 Instance B」のec2-userに接続するときは、下記のコマンドを利用します。

  • ssh ec2-user@10.0.1.86