Jenkinsパイプラインの一部として実行されるDockerコンテナ内でいくつかのgitクエリを実行しようとしています。Dockerコンテナの外では、sshsgentは正常に機能しており、SCMに問題なくアクセスできます。コンテナ内で、ホストキーの検証の問題が発生しています。
誰かが私が犯した間違いを手伝ってくれる?
script {
sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519'])
{
sh("""
ssh -p 7999 [email protected] whoami
""")
}
docker.withRegistry('https://dockerhub.banana.com', 'banana-dockerhub-credential')
{
docker.image('banana_release_base').pull()
docker.image('banana_release_base').inside(
'''
-v /system:/system -v /tmp:/tmp --privileged -u 0
'''
)
{
sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519'])
{
sh("""
echo $SSH_AUTH_SOCK
ssh -p 7999 [email protected] whoami
""")
}
}
}
}
最初のwhoami呼び出しの出力:
[docker_git_test] Running shell script
+ ssh -p 7999 [email protected] whoami
d42967b44abe31d6
Dockerコンテナ出力での2番目の呼び出し(およびエコー):
[docker_git_test] Running shell script
+ echo /tmp/ssh-dSoDZMggpAU1/agent.13
/tmp/ssh-dSoDZMggpAU1/agent.13
+ ssh -p 7999 [email protected] whoami
Host key verification failed
ホストキーの検証に失敗しました
コンテナ内のSSH接続は、ホスト(bitbucket-eng-gpk1.com)のIDを確認できなかったため、失敗しました。Jenkinsがコンテナーをプロビジョニングするとき、ビルドステップが分離されるように、コンテナーにマウントする環境変数やファイルシステムの場所など、外部からの物の量を制限しようとします。コンテナでは、接続を確立する前にVCSのホストキーを受け入れておらず、対話型端末ではないため、失敗します。
これを処理するには、いくつかの異なる方法があります。これが私の頭のてっぺんから考えることができるいくつかです:
ホスト鍵チェックを無視します(これのセキュリティへの影響を理解する(1、2)) -使用StrictHostKeyChecking
を無効にチェックするオプションを選択します。このUserKnownHostsFile
オプションは、受け入れられたキーを別の場所にパイプするための接続詞として役立ちます。これは、~/.ssh/config
ファイル内のホストごとに実行することもできます。
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 7999 [email protected] whoami
SSHキーをDockerイメージにビルドします(脆弱)
~/.ssh/config
ホストからコンテナにファイルをマウントします。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加