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を実行することができた。