SSH初回接続時のサーバ認証

こんにちは。

今回は掲題の件について、
豆知識を仕入れたので記載します。



  • あるサーバに初めてssh接続した時、メッセージが表示され入力待ちの状態になったことがあるかと思います。

  • 例えば、Githubにssh接続すると、初回は下記のメッセージが表示されます。

    The authenticity of host 'github.com (140.82.114.4)' can't be established.
    ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    
    • 用語の意味。
      • ED25519 : デジタル署名アルゴリズムの名前。
      • fingerprint : IDのようなもの。
      • SHA256 : ハッシュ関数の名前。
    • これは接続先のサーバを承認するかどうかの質問であり、一度「yes」入力してしまえば、次回以降この質問はされなくなります。
    • 承認することで、「.ssh/known_hosts」というテキストファイルにサーバのfingerprintが記録されます。

  • 初回接続時に上記質問メッセージが来るのをスキップする方法があります。下記どちらかをやればOKです。
    1. 事前に「.ssh/known_hosts」ファイルに接続先のサーバのfingerprintを書き込んでおく方法。

      • サーバのfingerprintを書き込むには下記のコマンドを実行します。
        ssh-keyscan [ホスト名] >> ~/.ssh/known_hosts
        
      • 参照するknown_hostsファイルのパスはsshコマンドのパラメータで指定することが可能です。
        ssh -o UserKnownHostsFile="[known_hostsファイルのパス]" 
        
    2. 事前に「.ssh/config」ファイルで対象ホストを「StrictHostKeyChecking no」に設定しておく方法。

      • configファイルを変更したくない場合は、sshコマンドのパラメータとして直接渡す方法もあります。
        ssh -o StrictHostKeyChecking=no
        

  • 余談ですが、Pipeline上でssh接続をする場合、上記質問が来ると入力待ちになり意図せず処理が止まってしまう可能性があります。
    そうならないように、上記のスキップさせる対応をすれば良いです。

  • ちなみに、Circle CI上ではcheckout実行時にgithub.com、bitbucket.org、gitlab.comのフィンガープリントをknown_hostsに書き込む処理がありましたので、
    その3者いずれかに接続する際はサーバ認証について意識しなくても処理が通るようになっているようです。


以上。
ssh