はじめに
sshコマンドで接続するのが初めてホストの場合、以下のように確認される。
The authenticity of host '123.456.XXX.XX (123.456.XXX.XX)' can't be established.
RSA key fingerprint is SHA256:OVFZORWKLs6yOQh9SJl5N1pnXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)?
直訳は以下。接続先ホストが信頼できるかどうかを確認している。
このホストが『123.456.XXX.XX(123.456.XXX.XX)』として本物か確認できていません
RSAキーのフィンガープリントはSHA256:OVFZORWKLs6yOQh9SJl5N1pnXXXXXXXXXXXXXXXXXXXです。
接続を続行してもよろしいですか(はい/いいえ)?
(※追記
最初、一行目は「ホスト「123.456.XXX.XX(123.456.XXX.XX)」の信頼性を確立できません」と訳していましたが、コメントにて、authenticity
の本来の意味をより詳しく教えていただきましたので修正いたしました。ありがとうございます!)
フィンガープリントとは、接続先の公開鍵から計算されたハッシュ値のこと。
この確認をされないようにする方法を2つメモしておきます。
方法
(1) sshコマンドにオプションを追加
StrictHostKeyChecking=no
オプションを追加する。
【オプションなし】
ssh 123.456.XXX.XX
↓
【オプションあり】
ssh -o StrictHostKeyChecking=no 123.456.XXX.XX
(2) SSHクライアントのconfigファイルに設定
ユーザー単位では~/.ssh/config
システム全体では/etc/ssh/ssh_config
以下のように設定する。
host 123.456.XXX.XX
StrictHostKeyChecking no
※パーミッションは600にしておかないとエラーが出る。
chmod 600 ~/.ssh/config
(今回の話とはズレるけど、このファイルにはこれ以外にもユーザー名、ポート番号等登録しておくとsshコマンドを簡潔に書くことができるらしい。
参考:https://qiita.com/passol78/items/2ad123e39efeb1a5286b )
StrictHostKeyCheckingについて
StrictHostKeyChecking
の取りうる値は
- yes
- no
- ask (デフォルト)
デフォルトがask
なので冒頭のように確認される。
2回目以降の接続でなぜ確認されなくなるのか
冒頭の確認でyes
と入力した場合、known_hosts
ファイルにに接続先ホストの公開鍵が登録される。
すると、2回目以降はsshコマンドによって自動的にホスト認証が実施される。
(登録された公開鍵とサーバーの公開鍵が一致しているかを確認する)
※known_hosts
はテキストファイル。
ファイルの場所は、システム全体では/etc/ssh/known_hosts
、
ユーザー単位の場合~/.ssh/known_hosts
。
今回、接続確認をしない設定にする理由
「初回の接続確認をなくす = 安全性も低くなる」ということなので、どうしても必要な時だけに留めるべきです。
それでも今回確認されないようにしたかった理由は、
- 接続元であるDockerのコンテナから
~/.ssh
ディレクトリ内のファイルが消えてしまうことがあり(原因追求できてないけどコンテナの再起動が原因??) - 初回の接続で
~/.ssh/known_hosts
ファイルに接続先の公開鍵が登録できても、ファイル自体が消えてしまうとまた接続の際に確認されるようになってしまい - 特に今回は定期的に実施する自動処理の中でssh接続をしたく、確認があるとエラーで処理が止まってしまう
というのを防ぎたかったからです。
ちなみに、同じ理由(~/.ssh
ディレクトリ内のファイルが消えてしまう)から、今回は2つの方法のうち「(1). sshコマンドにオプションを追加」で対応しました。
(「(2) SSHクライアントのconfigファイルに設定」だと~/.ssh/config
に設定してもファイルが消えたら設定も消えてしまうので)
いろんなケースがあるかと思いますが、今回は当該システムや接続先ホストが社内でのみ使用するものであり、他のセキュリティ対策もしているので問題ないかと対応をしました。
※内容に間違いがありましたら教えていただけますと幸いです。
※追記
コメントにて、最初に公開鍵を登録しておく方法を教えていただきました。
ありがとうございます。
勉強になるのでぜひ読んでみてください!
参考
https://journal.lampetty.net/entry/wp/391
https://urashita.com/archives/34227
https://www.softel.co.jp/blogs/tech/archives/1414
https://blog.mothule.com/tools/ssh/tools-ssh-basic#known_hosts%E3%81%A8%E3%81%AF
https://rurukblog.com/post/ssh-fingerprint/