シェル実行などでSSHキーを読めない場合

gitコマンドをシェルなどのスクリプトで実行しようとしたときに鍵認証に失敗することがあります。

Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

SSH鍵やknown_hostsのパスを標準から取得できないためで、『git config core.sshCommand』でSSHコマンドを設定すると実行できることがあります。
『git config core.sshCommand』によって設定を書き込むため、このコマンドの実行は1度だけでよく、gitコマンド実行のたびに設定を行う必要はありません。

git -C 【git作業フォルダ】 config core.sshCommand "ssh -i 【SSH公開鍵】 -o UserKnownHostsFile=【known_hostsのパス】 -o StrictHostKeyChecking=no -F /dev/null"

-C 【git作業フォルダ】

git作業フォルダを指定します。

core.sshCommand "ssh …"

gitコマンド実行時のSSH接続コマンドを指定します。

-i 【SSH公開鍵】

SSH接続に使用する公開鍵を指定します。
C:/Users/【ユーザー名】/.ssh/id_rsa

-o UserKnownHostsFile=【known_hostsのパス】

known_hostsのパスを指定します。
C:/Users/【ユーザー名】/.ssh/known_hosts

-o StrictHostKeyChecking=no

known_hostsにホストが登録されていなかった場合の、『yes/no』の質問を出さないようにします。

-F /dev/null

設定ファイルを除外します。

-i identityファイル

公開鍵認証の際にidentity (秘密鍵) を読むファイルを指定します。
デフォルトは、プロトコル 1 の場合ユーザのホームディレクトリにある~/.ssh/identity、プロトコル 2 の場合は~/.ssh/id_dsa ,~/.ssh/id_ecdsa ,~/.ssh/id_ed25519および~/.ssh/id_rsaになっています。
identity ファイルは設定ファイルによって、ホストごとに指定することもできます。
複数の-i オプションを指定することも可能です。(設定ファイルで複数の鍵を指定することもできます。)
証明書がCertificateFile設定項目で明示的に指定されていない場合、ssh は末尾に-cert.pubのついたファイル名からも証明書を読み込もうとします。

-F 設定ファイル

ユーザ毎の設定ファイルに別のファイルを指定します。
設定ファイルがコマンドラインから与えられた場合、システム全体の設定ファイル
/etc/ssh/ssh_config
は無視されます。
デフォルトでは、ユーザ毎の設定ファイルは~/.ssh/configになっています。

-o オプション

設定ファイルと同じ形式でオプションを与えたいときに使用します。
これはコマンドラインオプションでは指定できないオプションを指定したいときに便利です。

UserKnownHostsFile

ホスト鍵データベースとして使うファイルを空白で区切って指定します。
デフォルトでは~/.ssh/known_hosts~/.ssh/known_hosts2になっています。

StrictHostKeyChecking

この設定項目が"yes"に設定されている場合、ssh は決して~/.ssh/known_hostsファイルに自動的にホスト認証鍵を追加しません。
鍵が変更されているホストへの接続は拒否されます。これはトロイの木馬攻撃に対する最大の防御となりますが、/etc/ssh/ssh_known_hostsファイルをきちんと更新していなかったり、新規のホストに頻繁に接続するような状況だと邪魔になるかもしれません。
このオプションを使うとユーザは手で新しいホストの鍵を追加しなければならなくなります。
この設定項目が"no"に設定されている場合、ssh は新しいホスト鍵をユーザの known_hosts ファイルに自動的に追加します。
この設定項目が"ask"に設定されていると、新しいホスト鍵が追加されるのは、ユーザが本当にそれを望んでいると確認できたときだけになります。
ホスト鍵が変更されているホストへの接続は拒否されます。
known_hosts ファイルに含まれているホスト鍵はいかなる場合でも自動的に検査されます。
この設定項目がとりうる値は"yes"、"no"あるいは"ask"で、デフォルトは"ask"です。

スポンサーリンク

関連記事

スポンサーリンク

実行中のメソッド名やクラス名を取得する方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る