シェル実行などでSSHキーを読めない場合
gitコマンドをシェルなどのスクリプトで実行しようとしたときに鍵認証に失敗することがあります。
[参考記事] SSHで初めて接続するホストで、接続するかどうかyes/noを聞かれないようにする
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』の質問を出さないようにします。
[参考記事] SSHで初めて接続するホストで、接続するかどうか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"です。
関連記事
- Gitを自動的にpullする方法(常に最新の状態にする)
- Gitの最新版をインストールする方法(CentOS7に2系をインストール)
- SSHで初めて接続するホストで、接続するかどうかyes/noを聞かれないようにする
- yumのius(iuscommunity.org)でエラーが出る場合
- 改行コードの自動変換 core.autocrlf core.safecrlf
- cron
- cron実行時のPATHなどの環境変数を確認する方法
- データベースを定時バックアップする方法(毎日バックアップする処理)
- 数日おきに設定したcronの実行が1日ずれる理由
- cron実行時に『/bin/sh: 〜〜: command not found』と出てcronが実行されない場合
- さくらサーバ(さくらのレンタルサーバ)でcronを使ってPHPを定時実行する
- cron実行時の標準出力のメールを飛ばさない方法(cron実行時に毎回メールを飛ばさない)
- 『crontab -r』でcronの設定を間違って消してしまった場合の対処法
- cronのメール送信先を指定する方法(cronごとに送信先のメールアドレスを指定する方法)
- cronを実行すると『TERM environment variable not set.』というエラーメールが飛ぶ
スポンサーリンク