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」攻撃を防ぐ。
やること
- 公開鍵で接続できるか検証
- 接続元の秘密鍵を別の接続元にコピーして接続できるか検証
- 公開鍵を転送して別の送信元から接続できるか検証
- 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にしないと正しく動かなかった。はぁ時間かかった( ̄д ̄;;)