SourcetreeをインストールしてSSHの鍵を生成してGitHubに登録、いざCloneするぞ、という時に「ソースパス/ソース URLとして正しくありません」であったりその詳細…
で「エラー: The host key is not cached for this server:」というエラーが表示されてしまう方向けの記事です。
何が起きているのか
Hint
解決を急ぐ方は以下の解決方法まで読み飛ばしてOKです。
SSHは初めてアクセスするホストの場合、接続先ホストのフィンガープリントを提示して本当にアクセスしてよいか対話的に確認します。コマンドラインでgit cloneする場合にはここで y [エンター]
を叩けば良いのですが、SourcetreeはGUIのため、対話的にyを叩くチャンスがなくエラーになってしまいます。
ではコマンドプロンプトからssh git@github.com
を実行し、この時にyを叩いてからSoucetree側でCloneすれば良いように思いますが、この時のコマンドラインから見えているsshクライアントとSourcetreeが利用するsshクライアントが異なっているため、このアプローチもうまくいきません。
解決方法1:plink.exeを直接実行して信頼する
コマンドプロンプトから以下のようにplinkを実行し、 y [エンター]
を叩きます。
%LOCALAPPDATA%\SourceTree\app-3.4.11\tools\putty\plink.exe git@github.com
Hint
GitHubの場合の例です。接続先に合わせて適宜書き換えてください。
Hint
SourceTree 3.4.11の場合の例です。パスにバージョン値が含まれていますので、適宜書き換えてください。
解決方法2:PuTTYの代わりにOpenSSHを利用する
上部メニューからツール
→ オプション
でオプションウィンドウを開き、SSH クライアントをOpenSSH
に変更します。
パスが通っているsshが接続先ホストと公開鍵認証で疎通できる状態であれば、これだけでOKです。
これからセットアップする場合はおおむね以下の手順になります。
- ssh クライアントをインストール(GitBash付属のもの、PowerShellのもの、MSYS2のものなど、なんでもいいです)
- シェルを開き、
ssh-keygen
を実行して鍵ペアを作ります - 作った公開鍵が
~/.ssh/
にあるので、これをサーバに登録します(GitHubであれば https://github.com/settings/ssh/new です) -
ssh [server]
を実行し、信頼済みホストに登録しておきます(GitHubであればssh git@github.com
です) - オプションウィンドウから
SSH クライアントの設定
のSSH キー
に先ほど作った鍵ペアの秘密鍵の方(拡張子が無いもの)を指定します
この状態でSourceTreeからCloneを実行すれば件のエラーは解消していると思います。
最後に
以前はYes/Noのところでダイアログボックスが表示されませんでしたっけ・・・?
接続先ホストのフィンガープリントを自力で計算してPuTTYの信頼済みホストに登録する方法も模索したのですが、PuTTYのフィンガープリントの計算方法がわからず断念しました。