SSHで初めて接続するホストで、接続するかどうかyes/noを聞かれないようにする

SSH接続で初めて接続するホストでは、フィンガープリントを表示して、接続するかどうかの確認が求められます。

[参考記事] シェル実行などでSSHキーを読めない場合

SSHコマンドのオプションで無効にする方法
SSH設定で無効にする方法
known_hostsに登録されたホストを削除する方法
SSHサーバ側のフィンガープリントの鍵ファイル
無効にすることの危険性

The authenticity of host '【ホスト名】' can't be established.
RSA key fingerprint is SHA256:vUgu+kx0TXXX/3Zaxxxx/+3nNxxxxxx/C/+ncbV/20g.
RSA key fingerprint is MD5:25:f5:f5:f5:f5:f5:f5:f5:f5:f5:f5:7b:e3:3f:f5:f5.
Are you sure you want to continue connecting (yes/no)?

この確認があるとシェルプログラムなどでは、コマンドが止まってしまったりします。

SSHコマンドのオプションで無効にする方法

確認を聞かれないようにするには、SSHコマンドに「StrictHostKeyChecking=no」をオプションで指定します。

ssh -o StrictHostKeyChecking=no

SSH設定で無効にする方法

SSHクライアントの設定ファイルに、「StrictHostKeyChecking」を書くことで確認を聞かれないようにすることができます。

ユーザーごとの設定ファイル ~/.ssh/config
システム全体の設定ファイル /etc/ssh/ssh_config

$ vi ~/.ssh/config
host *
  StrictHostKeyChecking no

~/.ssh/config ファイルは、パーミッションを600にします。

$ chmod 600 ~/.ssh/config

パーミッションが正しくないと次のようなエラーがでます。

Bad owner or permissions on /home/hoge/.ssh/config

hostの指定は、「 * 」であればすべてのホストとなります。 192.168.1.* や *.example.com のような指定もできます。

host 192.168.1.*
  StrictHostKeyChecking no

host *.example.com
  StrictHostKeyChecking no

known_hostsに登録されたホストを削除する方法

確認済みのホストは、~/.ssh/known_hostsに記録されます。 登録されたホストを削除するには下記のコマンドです。

$ ssh-keygen -R 【ホスト名】

例:localhost

$ ssh-keygen -R localhost

例:ssh.example.comのポート番号2222

$ ssh-keygen -R [ssh.example.com]:2222

SSHサーバ側のフィンガープリントの鍵ファイル

フィンガープリントの元となるデータは、
鍵ファイルとして/etc/ssh以下に
ssh_host_*_key、ssh_host_*_key.pubのペアで存在しています。
サーバを移転するときは、これらのファイルを移行することでフィンガープリントが同一となり、yes/noは聞かれません。

CentOS8
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub

CentOS7
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub

CentOS6
ssh_host_dsa_key
ssh_host_dsa_key.pub
ssh_host_key
ssh_host_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub

SSHサーバの設定ファイルsshd_configでは、HostKeyの指定です。

vi /etc/ssh/sshd_config

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

無効にすることの危険性

ただし、この確認は接続しようとしているホストが正しいかを確認するものなので、改ざんのリスクがあります。
known_hostsファイルに接続したことがあるホストのフィンガープリントを保持し、次からは保持したフィンガープリントとホストのフィンガープリントを確認し、ホストが正しいかを判断します。
異なるサーバに改ざんされていた場合は、再度冒頭の接続確認がでます。

代表的な攻撃手法は、DNSスプーフィング(DNS Spoofing)です。
DNSの応答を偽装し、本来とは別のサーバに接続させる手法です。

スポンサーリンク

関連記事

スポンサーリンク

rightプロパティが親要素のボックスを基準にした配置を行わない

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る