キーペアーを紛失したec2-user以外のユーザーで、EC2にsshでログインする方法

# 概要
表題の通り、実務にてキーペアーを紛失した`ec2-user`以外のユーザーで`EC2`のサーバーに`ssh`で接続する必要があったので、その対処方法を記載します。

# 前提条件
:::note warn
- `EC2`のサーバーが構築されている
- `ec2-user`以外のユーザーが作成されている
- `ec2-user`or `root`であれば、`EC2`のサーバーに`ssh`でログインできる
:::

# 注意事項
:::note alert
公開鍵・秘密鍵の取り扱いになる為、慎重に作業を行って下さい
:::


# サーバー側で行う設定
## バックアップの作成
1．`root`ユーザー、`ec2-user`で、`EC2`のサーバーにアクセスする
<font color="red">※ セッションマネージャーを使用してアクセスしても良い</font>
<font color="red">※ ローカル環境で`EC2`に`ssh`で接続する場合は、下記の方法で行う</font>

```sh
# ローカル環境の.sshディレクトリーに移動
cd ~/.ssh

# EC2のアクセスコマンド
ssh -i "〇〇.pem" ユーザー名@ec2-パブリックIPv4アドレス.リージョン.compute.amazonaws.com

# 入力例
# ユーザー名には関しては、root or ec2-userどちらでも良い
ssh -i "test.pem" root@ec2-00.00.00.000.us-east-1.compute.amazonaws.com
```

2．サーバー内の`.ssh`ディレクトリーに移動する
```sh
cd /home/ユーザー名/.ssh
# 上記のコマンドで表示されない場合がある
# サーバー毎に、どこに.sshディレクトリーがあるか調べる必要がある
```

3．バックアップディレクトリーを作成
```sh
mkdir 任意のディレクトリー名

入力例
mkdir backup_keys
```

4．`cat`コマンド使用して、公開鍵の中身確認して、その内容をコピーする
```sh
cat authorized_keys
# 設定を変更していなければ、authorized_keysの名前で公開鍵が保存されている

# 出力内容
ssh-rsa 

# 省略

test@ip-000-00-0-000.us-west-1.compute.internal
```

5．`backup`ディレクトリーに移動する
```sh
cd 任意のディレクトリー名
```

6．`touch`コマンドを使用して、ファイルを作成する
```sh
touch 任意のファイル名

#　入力例
touch backup_keys
```

7．先程、`touch`コマンドで作成したファイルを`vim`or`vi`エディターで開き、コピーしておいた公開鍵を貼り付ける
```sh
vim 任意のファイル名

# ファイル内
ssh-rsa 

# 省略

test@ip-000-00-0-000.us-west-1.compute.internal
```
上記の工程まで終われば、バックアップの作成は完了


# ローカル環境で行う設定
1.ターミナル等の`CLI`を開き、`.ssh`ディレクトリーに移動する
```sh
cd ~/.ssh
```

2.既存の公開鍵・秘密鍵に影響しない様に、`.ssh`ディレクトリー内に新しいディレクトリーを作成する
```sh
mkdir 任意の名前

# 入力例
mkdir test_pem_directory
```

3．上記で作成したディレクトリーに移動する
```sh
cd 任意の名前

# 入力例
cd test_pem_directory
```

4．`ssh-keygen`のコマンド使用して、公開鍵・秘密鍵を作成する
```sh
ssh-keygen -t rsa -m PEM -f ~/.ssh/test_pem_directory/test_pem
# t rsa: RSAキーの暗号アルゴリズムを使う
# -m PEM: PEM 形式の鍵を生成するように指定
# -f: ファイル場所とファイ名を指定
```

5．`〇〇.pub`の中身をコピーして控えておく
```sh
cat 〇〇.pub

# 出力内容
ssh-rsa 

# 省略

test@test.com
```

6． 下記の工程を行う(サーバー側での作業)
[ローカル環境で、公開鍵・秘密鍵を作成した後に行う作業](https://qiita.com/kengo-sk8/items/bc865ae51f4a0246949c#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%E5%85%AC%E9%96%8B%E9%8D%B5%E7%A7%98%E5%AF%86%E9%8D%B5%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AB%E8%A1%8C%E3%81%86%E4%BD%9C%E6%A5%AD)


# 公開鍵・秘密鍵をEC2に設置
1．　権限が付与されているユーザー(`root`、`ec2-user`等)で、`EC2`のサーバーにアクセスする
```sh
# 他のユーザーでも可能
sudo su root or ec2-user
```

2．　EC2のサーバー内にある`authorized_keys`が存在するディレクトリに移動する
```sh
cd home/ユーザー名/.ssh/
```

3．　ローカル環境で作成した公開鍵を貼り付ける

:::note warn
注意事項
別の人の公開鍵(`〇〇.pub`)がある場合は、その公開鍵の下に、改行して1行空けてから貼り付けを行う
:::

```sh
# ファイル編集
vim home/ユーザー名/.ssh/authorized_keys

# authorized_keysの中身
ssh-rsa 

# 省略

test@ip-000-00-0-000.us-west-1.compute.internal
# 改行
ssh-rsa 

# 省略

test@test.com
```



# 参考資料
- [SSHの基本と、公開鍵を登録してサーバーに入るまでの手順](https://zenn.dev/tekihei2317/articles/4f3944842ed95f)
- [[stack overflow]:Ruby Net/SSH 7.0.1 - Ubuntu 22 / OpenSSL 3 issue](https://stackoverflow.com/questions/72818958/ruby-net-ssh-7-0-1-ubuntu-22-openssl-3-issue)
- [【図解】公開鍵・秘密鍵の仕組みを分かりやすく ～公開鍵暗号方式の身近で具体的な利用例やメリット～
](https://milestone-of-se.nesuke.com/sv-advanced/digicert/public-private-key/)

# 感想
公開鍵・秘密鍵に関しては、全然分かっていなかったので、今回勉強できてよかったと思ってます。今後も公開鍵・秘密鍵の設定に関しては、触る機会がありそうなので、次に同じ様な問題があった時は、サックと対応したいと思います。