Gitを介して非対話式に自動更新したいUbuntu 20.04 Serverを実行するRaspberry Piがたくさんあります。
スクリプトは次のことを行います。
eval "$(ssh-agent -s)" ; ssh-add /home/michael/.ssh/terminal_github_deploy_key ; git -C /home/michael/terminal/src pull
このスクリプトは実際にPythonで書かれていますが、上記と同じことを行います。
cmds = []
cmds.append('eval "$(ssh-agent -s)"')
cmds.append(f'ssh-add {HOME_DPATH}/.ssh/terminal_github_deploy_key')
cmds.append(f'git -C {CHECKOUT_DPATH} pull')
cmd = ' ; '.join(cmds)
subprocess.check_call(cmd, shell=True)
この対話型警告を発生させることを除いて、うまく機能します。
The authenticity of host 'github.com (140.82.121.3)' can't be established.
ECDSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes | ...
研究によると、セキュリティ上の理由から意図的にパイプを許可しません(したがって動作しません)。警告が発生する原因が何であるかよくわかりません。 Gitで呼び出すSSHのようですが、無視する方法がわかりませんか?必ずしも使用する必要はありませんが、ssh-add
これを機能させる方法です。
答え1
次のような他のスクリプトを書く必要はありません。予想される、あなたがいるときバニラ。
最も簡単な方法は追加することです。Githubホストキー到着
.ssh/known_hosts
編集:サーバーが多く、サイトのコンテンツが別々のホストキーではないため、これは不可能です。
それ以外の場合は、次のものを使用できます。GitPythonオートメーション
答え2
上記の@Wielandの答えと似ていますが、少し優れています。スクリプトホストキー検証を無効にする代わりに、接続を試みる前にSSHに公開鍵をインポートするように要求できます。
$ export MACHINE_IP=...
$ ssh-keyscan "$MACHINE_IP" | tee -a ~/.ssh/known_hosts
$ ./path/to/script
これがSSHアクセス(たとえばAnsible)を必要とするCICDワークフローを設定する方法です。この場合、IPは静的であるため、どこかに保存し、~/.ssh/known_hosts
スクリプトを実行する前にCICDパイプラインにファイルを追加するようにしてください。
IPアドレスの代わりにFQDNを使用することもできますが、ホストが現在または将来複数のIPアドレスで解決できる動的DNSの動作を知っている必要があります。
答え3
以下を設定して、SSH-through-gitのホストキー検証を無効にできますStrictHostKeyChecking=no
。
このオプションを使用すると、ユーザーはすべての新しいホストを手動で追加する必要があります。このフラグが「no」に設定されている場合、sshは自動的にユーザーが知っているホストファイルに新しいホストキーを追加します。
(からSSH構成(5))。git -c core.sshCommand='ssh -o StrictHostKeyChecking=no' pull
SSHコマンドのようにgitを呼び出すと、gitはこのフラグをSSHに渡します。