あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

SSH公開鍵認証について調査・検証してみた

SSHは接続するだけなら簡単に設定できるが、いろいろいじくりまわすと細かい機能によってうまく接続できなくなるので、仕様の確認と様々なケースでの接続検証をしてみた。

SSHとは

Secure Shell(セキュアシェル)の略称で、リモートコンピュータと通信するためのプロトコル。 well-knownポートの22番を使用する。認証部分を含めネットワーク上の通信がすべて暗号化されるため、安全に通信することができる。

SSH認証方式

・パスワード認証:接続先にアカウントを作成し、そのアカウントで認証を行う。
・公開鍵認証  :[公開鍵]と[秘密鍵]を使用する認証方式。
         SSH鍵を生成し、接続元に秘密鍵、接続先に公開鍵を保存、
         鍵の保持で認証を行う。

authorized_keysとは

リモートコンピュータ側で公開鍵を保存するために使用するファイル。SSH鍵を作成すると秘密鍵(id_rsa)と、公開鍵(id_rsa.pub)が作成され、リモートコンピュータへ公開鍵をコピーするが、リモートコンピュータではauthorized_keys内の公開鍵で認証を行うため、id_rsa.pubの中身をauthorized_keysへコピーする必要がある。ssh-copy-idコマンドでは自動的にid_rsa.pubをauthorized_keysへコピーを行う。

knows hostsリストとは

SSH (Secure Shell) プロトコルで使用され、接続先のホストの公開鍵を記録する。SSHクライアントが接続を試みるリモートサーバーの公開鍵が、以前に保存されたものと一致することを確認することで、「man-in-the-middle」攻撃を防ぐ。



やること

  1. 公開鍵で接続できるか検証
  2. 接続元の秘密鍵を別の接続元にコピーして接続できるか検証
  3. 公開鍵を転送して別の送信元から接続できるか検証
  4. knows hostsリストによって拒否されること検証

構成

サーバ ホスト名 OS IPアドレス
接続元1 src-server01 Rockey8.6 192.168.10.171/24
接続元2 src-server02 Rockey8.6 192.168.10.172/24
リモートコンピュータ1 dst-server01 Rockey8.6 192.168.10.173/24
リモートコンピュータ2 dst-server02 Rockey8.6 192.168.10.174/24

前提

構成のサーバが作成されていて、22番ポートが解放されていること。
CentOS系を使用する場合はSELINUXが邪魔をするのでオフにするか、いい感じで設定を入れておくこと。

実践!

1.公開鍵で接続できるか検証
 1-1.src-server01とdst-server01で接続用ユーザ(src)作成

root@src-server01# useradd src
root@src-server01# passwd src

root@dst-server01# useradd src
root@dst-server01# passwd src


 1-2.src-server01でsrcユーザのSSH鍵を生成

root@src-server01# su - src
src@src-server01$ ssh-keygen -t rsa
※選択はすべて空白でENTERキーを入力。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/src/.ssh/id_rsa): [ENTER]
Created directory '/home/src/.ssh'.
Enter passphrase (empty for no passphrase): [ENTER]
Enter same passphrase again: [ENTER]
Your identification has been saved in /home/src/.ssh/id_rsa.
Your public key has been saved in /home/src/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:prOvJPNFLdzeTONLEGeJJHi+8GM73makWqu/8l1uieo src@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|       .. .      |
|      . .o . .   |
|       o  o +    |
|      ...o +     |
|       oS.+ o    |
|       +=o.* .   |
|    o +.o=..*.   |
|     =.=++++o.   |
|      *@E*o.o    |
+----[SHA256]-----+

src@src-server01$ chmod 700 ~/.ssh


 1-3.src-server01からdst-server01へsrcユーザの公開鍵をコピー

src@src-server01$ ssh-copy-id -i ~/.ssh/id_rsa.pub src@192.168.10.173


 1-4.src-server01からdst-server01へパスワードなしでSSH接続できることを確認

src@src-server01$ ssh src@192.168.10.173
src@dst-server01$
※まぁ通常の使い方なので大丈夫ですね


2.接続元の秘密鍵を別の接続元にコピーして接続できるか検証
 src-server01のsrcユーザの秘密鍵をsrc-server02へコピーし検証する

 2-1.src-server02でsrcユーザ作成

root@src-server02# useradd src
root@src-server02# passwd src


 2-2.src-server02のsrcユーザのSSHディレクトリを作成

root@src-server02# su - src
src@src-server02$ mkdir ~/.ssh
src@src-server02$ chmod 600 ~/.ssh


 2-3.src-server01からsrc-server02へ秘密鍵をコピー

src@src-server01$ scp ~/.ssh/id_rsa src@192.168.10.172:/home/src/.ssh/id_rsa
src@192.168.10.172's password:
id_rsa                                        100% 2590     6.0MB/s   00:00


 2-4.src-server02からdst-server01へパスワードなしでSSH接続できることを確認

src@src-server02$ ssh src@192.168.10.173
src@dst-server01$


3.公開鍵を別の接続先へ転送して接続元から接続できるか検証
 dst-server01のsrcユーザの公開鍵をdst-server02へコピーし検証する
 3-1.dst-server02でsrcユーザ作成

root@dst-server02# useradd src
root@dst-server02# passwd src


 3-2.dst-server02のsrcユーザのSSHディレクトリを作成

root@dst-server02# su - src
src@dst-server02$ mkdir ~/.ssh
src@dst-server02$ chmod 700 ~/.ssh


 3-3.dst-server01のsrcユーザの公開鍵をdst-server02へコピー

src@dst-server01$ scp ~/.ssh/authorized_keys src@192.168.10.174:/home/src/.ssh/authorized_keys
src@192.168.10.174's password:
authorized_keys                               100%  563   762.4KB/s   00:00


 3-4.src-server01からdst-server02へパスワードなしでSSH接続できることを確認

src@src-server01$ ssh src@192.168.10.174
src@dst-server02$


4.knows hostsリストによって拒否されること検証
 dst-server01を同じIPアドレスで再作成し、known_hostsによって接続できないことを検証する
 4-1.dst-server01を削除
 4-2.dst-server01を再作成
 4-3.dst-server01でsrcユーザを作成

root@dst-server01# useradd src
root@dst-server01# passwd src


 4-4.dst-server01のsrcユーザのSSHディレクトリを作成

root@dst-server01# su - src
src@dst-server01$ mkdir ~/.ssh
src@dst-server01$ chmod 700 ~/.ssh

 4-5.src-server01からdst-server01へ公開鍵をコピー

src@src-server01$ ssh-copy-id -i ~/.ssh/id_rsa.pub src@192.168.10.173
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/src/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:VY3P9hESLPjaFPumaBXQiP+uQ7SGx3LkIg0zt4k1hjs.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/src/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/src/.ssh/known_hosts:1
ERROR: ECDSA host key for 192.168.10.173 has changed and you have requested strict checking.
ERROR: Host key verification failed.
※すでにここでエラーになる。。。

src@src-server01$ rm -rf ~/.ssh/known_hosts
※known_hostsを削除して接続を試みる

src@src-server01$ ssh-copy-id -i ~/.ssh/id_rsa.pub src@192.168.10.173
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/src/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
src@192.168.10.173's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'src@192.168.10.173'"
and check to make sure that only the key(s) you wanted were added.
※今度はコピーOK!

src@src-server01$ ssh src@192.168.10.173
※パスワードなしでの接続もOK!




感想

~/.sshとauthoraized_keysのパーミッションではまった。。。特に~/.ssh。これも600にしないと正しく動かなかった。はぁ時間かかった( ̄д ̄;;)