capistranoで、サーバー公開鍵認証のエラー

capistranoでdeployしようとするとき、sshでサーバーにログインしようとする段階で「Net::SSH::HostKeyMismatch, fingerprint my_fingerprint does not match for myserver」みたいなエラーが発生する。

同じエラーに遭遇した人 を発見。

net-sshのソースを読むと、known_hostsをサーチしてリモートのfingerprintが入っていたらok, さもなくば例外を発生するというコードになっている。

class HostKeyVerifier
  def verify(arguments)
    # .... 中略
    found || process_cache_miss(host, arguments)
  end
end

うん。net-sshとしては、アプリケーションがこの例外をハンドリングして自前でfingerprintの確認UIを出すというのを期待してるんだろうな。capistranoはそれをやってない。

とりあえず、opensshのclientで事前に一度、deploy先サーバーにログインしておく。そうすればknown_hostsに入る。これでエラー無くcapistranoを実行することができた。