ssh-copy-idコマンドを試してみた

# はじめに
踏み台サーバーに公開鍵と秘密鍵を作成して、公開鍵をサーバーに登録するにはssh-copy-idコマンドが便利と聞いたため、試してみました。

**発行した秘密鍵と公開鍵の名前は変更しないでください。ssh-copy-idコマンド実行時に鍵がありませんというエラーが出ます。**

参考にしたサイトです。
https://atmarkit.itmedia.co.jp/ait/articles/1908/15/news023.html
https://qiita.com/gakuseikai/items/707a8f740db59a8c30ef

### ユーザーにSSH接続する

### 踏み台サーバーにて公開鍵と秘密鍵を作成する
今回はパスフレーズなしです。

ssh-keygen -t rsa
デフォルトで RSA 鍵を生成することが多いですが、必要に応じて他の鍵タイプ（たとえば、ED25519 や ECDSA など）を生成するために -t オプションを使用した方がよいです。
**今回はデフォルトRSAで鍵を作成しました。**
```
[test1@localhost ~]$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/test1/.ssh/id_rsa):
Created directory '/home/test1/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test1/.ssh/id_rsa.
Your public key has been saved in /home/test1/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:lBf+DZmCnp585WybpYYBjALte7yp1MAJgzVQJVF1d3c test1@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|.o*=o.. . o . . E|
| o.o.  . = o + . |
|. oo   o+ + +    |
|   +o..ooo o o   |
|    ++  S.  o .  |
|    .ooo ..+     |
|    ...o+ .o+ .  |
|   .  o  ....=   |
|    ..     .+    |
+----[SHA256]-----+
```
鍵が作成されたことを確認する
```
[test1@localhost .ssh]$ ls -tlra　/home/test1/.ssh/
合計 8
drwxr-xr-x. 3 test1 test1  112  1月 21 19:31 ..
-rw-r--r--. 1 test1 test1  409  1月 21 19:31 id_rsa.pub　※公開鍵
-rw-------. 1 test1 test1 1675  1月 21 19:31 id_rsa　※秘密鍵
drwx------. 2 test1 test1   38  1月 21 19:31 .
```
### 作成した公開鍵をサーバーに登録する
iオプションに公開鍵を指定する
```
[test1@localhost .ssh]$ ssh-copy-id -i id_rsa.pub test1@192.168.0.101
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
test1@192.168.0.101's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'test1@192.168.0.101'"
and check to make sure that only the key(s) you wanted were added.

[test1@localhost .ssh]$
[test1@localhost .ssh]$
```
### サーバーにSSH接続してauthorized_keysファイルに公開鍵が登録されたことを確認する。
自動的にauthorized_keysは作成されます。

サーバーに例192.168.0.101に先ほど作成した秘密鍵でSSH接続できることを確認する。
```
ssh -i id_rsa test1@192.168.0.101
```
authorized_keysファイルに公開鍵が登録されていることを確認する。
```
[test1@localhost ~]$ cd .ssh
[test1@localhost .ssh]$ ls -tlra
合計 4
drwx------. 3 test1 test1  95  1月 21 19:35 ..
drwx------. 2 test1 test1  29  1月 21 19:35 .
-rw-------. 1 test1 test1 409  1月 21 19:35 authorized_keys
```
authorized_keysファイルの中身を確認する
```
[test1@localhost .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtOpKUSNmqf5Nvycc/560MAcnAMWuFyKb/d07WDdRr2JW4SaefBlV9fRY2d6Z+0W+MPztnBVUFZY9jFSocMk67o6v15PjTvkLTL9XOg7Itj180pvxS/RoCLbzUPlS3npdIkAHUvxihpRG/YMi6O65Y4SGRDDIv4GPRiaRYK2jwsh/LFXu7mlnqgwYrm69zjK1APqFxmW2DG8uFHXdc+83xutO1mrqr5QwQZyz1EBOMdUbXACkAdN+n8olSAp9PpTDhNlIaBv2V0k2WJ+O5R12VVfDYXfHHri/jyQ8pv3MSMXWSieNQQ9l9ndyz+IT5aIYege+bcQg0qspVCDzKH+nh test1@localhost.localdomain
```
## 2つ目の秘密鍵と公開鍵を踏み台サーバーに作成してみた


-fオプションで秘密鍵と公開鍵のファイル名を指定します。
https://uxmilk.jp/52740
```
[test1@localhost .ssh]$ ssh-keygen -f id_rsa2
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa2.
Your public key has been saved in id_rsa2.pub.
The key fingerprint is:
SHA256:JyXlL2ARI6Jm5Wx9zf8XsTKM/aiie9I8jd9kOYa8xpk test1@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|    o . +..      |
|   = o . B       |
|  + + . = =    . |
| o .   o + o+   o|
|        S o.o= o |
|         o....* .|
|        o +ooB...|
|       . B EB .. |
|       o= =+ .   |
+----[SHA256]-----+
[test1@localhost .ssh]$
```
同じ鍵名にすると上書きされるため、既存の鍵とは異なる鍵名にする必要があります。
```
[test1@localhost .ssh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test1/.ssh/id_rsa):
/home/test1/.ssh/id_rsa already exists.
Overwrite (y/n)?  ←上書きしますかというメッセージが出ます。
[test1@localhost .ssh]$ ssh-keygen
```




秘密鍵と公開鍵が作成されたことを確認する
```
[test1@localhost .ssh]$ pwd
/home/test1/.ssh
[test1@localhost .ssh]$ ls -ltra
合計 24
drwxr-xr-x. 3 test1 test1  112  1月 21 19:31 ..
-rw-r--r--. 1 test1 test1  409  1月 21 19:31 id_rsa.pub
-rw-------. 1 test1 test1 1675  1月 21 19:31 id_rsa
-rw-r--r--. 1 test1 test1  175  1月 21 19:32 known_hosts
-rw-------. 1 test1 test1  409  1月 21 19:55 authorized_keys
-rw-r--r--. 1 test1 test1  409  1月 21 20:06 id_rsa2.pub ※作成された公開鍵
-rw-------. 1 test1 test1 1675  1月 21 20:06 id_rsa2※作成された秘密鍵
drwx------. 2 test1 test1  114  1月 21 20:06 .
```
### id_rsa2.pubの公開鍵をサーバーに登録する
```
[test1@localhost .ssh]$ ssh-copy-id -i id_rsa2.pub test1@192.168.0.101
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa2.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'test1@192.168.0.101'"
and check to make sure that only the key(s) you wanted were added.
```
### サーバーにSSH接続してauthorized_keysファイルにid_rsa2.pub公開鍵が追加されたことを確認する。

秘密鍵でSSH接続できることを確認する。
```
[test1@localhost .ssh]$ ssh -i id_rsa2 test1@192.168.0.101
Last login: Sun Jan 21 20:07:28 2024
[test1@localhost ~]$
[test1@localhost ~]$
```
```
[test1@localhost .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtOpKUSNmqf5Nvycc/560MAcnAMWuFyKb/d07WDdRr2JW4SaefBlV9fRY2d6Z+0W+MPztnBVUFZY9jFSocMk67o6v15PjTvkLTL9XOg7Itj180pvxS/RoCLbzUPlS3npdIkAHUvxihpRG/YMi6O65Y4SGRDDIv4GPRiaRYK2jwsh/LFXu7mlnqgwYrm69zjK1APqFxmW2DG8uFHXdc+83xutO1mrqr5QwQZyz1EBOMdUbXACkAdN+n8olSAp9PpTDhNlIaBv2V0k2WJ+O5R12VVfDYXfHHri/jyQ8pv3MSMXWSieNQQ9l9ndyz+IT5aIYege+bcQg0qspVCDzKH+nh test1@localhost.localdomain
追加→ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVFwH+nOY9w4PdV+2+iH73ac8LOs2MJjCCuDtz3Q0bI/H0Ty0iXNHTK4/ET++gPAWBlrBZ42NOtKnG9IskE15Jdg6I5iSOopXFj4jq2EZwEZkNAz4/w7/rKo6QhIocxTr0uRa/IjV9a8TIB5CURDagLYk0s6hnVfZg1Jv470n2r6tNHPfJoIRTDj3oX4b9l5SWeRE0PmpbMyey4kvr4cuLFRiNRZoaqPfLh8QJmU9L9si1Zhig5FhNFjdSiKal5jD8aTqH3UzpqhsgIyqn+eD6IFC/PoTV859LYfK1I/X91VicQOrcOBtCM5c6/SBqdSa3aQqU3qNGblpKY5LtnvqD test1@localhost.localdomain
```


### まとめ
簡単に公開鍵のコピーが出来ることが分かりました。
ssh-copy-idコマンドを使用して公開鍵をコピーすることをお勧めします。

ssh-keygenで鍵タイプを指定しない場合はデフォルトではRSAタイプになると思いますが
サーバーによってはRSAにならない可能性があるため、RSAタイプと指定した方が安全です。

鍵ファイルは同名のものを作成できないことが分かりました。
2つの鍵を作成する場合は、鍵ファイルを別名にする必要があります。
同じ名前にしたら鍵が上書きますかというメッセージが出ます。

ssh-copy-idコマンドを使用すると、新規に公開鍵を登録する際はauthorized_keysが自動的に作成されて、2つ目の公開鍵を登録する際はauthorized_keysに公開鍵が追記されることが分かりました。