5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ssh接続で初めてのホストへの接続を確認されないようにする方法

Last updated at Posted at 2022-04-29

はじめに

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/

5
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?