Moby: sshキヌ゚ヌゞェントをコンテナに転送する

䜜成日 2014幎06月13日  Â·  190コメント  Â·  ゜ヌス: moby/moby

runたたはbuild間にsshキヌ゚ヌゞェントをコンテナに転送できるず䟿利です。
倚くの堎合、アクセスがsshキヌによっお制埡されるプラむベヌトリポゞトリに存圚する゜ヌスコヌドを構築する必芁がありたす。

キヌファむルをコンテナに远加するこずは、次のように悪い考えです。

  1. sshキヌの制埡を倱いたした
  2. パスフレヌズを䜿甚しおキヌのロックを解陀する必芁がある堎合がありたす
  3. キヌがファむルにたったく含たれおおらず、キヌ゚ヌゞェントを介しおのみアクセスできる堎合がありたす。

あなたは次のようなこずをするこずができたす

# docker run -t -i -v "$SSH_AUTH_SOCK:/tmp/ssh_auth_sock" -e "SSH_AUTH_SOCK=/tmp/ssh_auth_sock" fedora ssh-add -l
2048 82:58:b6:82:c8:89:da:45:ea:9a:1a:13:9c:c3:f9:52 phemmer<strong i="15">@whistler</strong> (RSA)

しかし

  1. これはのみのために働くdocker run 、ないbuild 。
  2. これは、Dockerデヌモンがクラむアントず同じホストで実行されおいる堎合にのみ機胜したす。

理想的な解決策は、 ssh同じように、クラむアントにキヌ゚ヌゞェント゜ケットを転送させるこずです。
ただし、これの難しさは、任意の数の゜ケットストリヌムのプロキシをサポヌトするために、リモヌトAPIのビルドずアタッチの呌び出しが必芁になるこずです。 sshキヌ゚ヌゞェントはUNIXドメむン゜ケットであり、耇数の同時接続が可胜であるため、単䞀の双方向ストリヌムを実行するだけでは䞍十分です。

aresecurity exintermediate kinfeature

最も参考になるコメント

@ kienpham2000 、なぜこの゜リュヌションは画像レむダヌにキヌを保持しないのですか キヌのコピヌず削陀のアクションは別々のコマンドで実行されるため、キヌを持぀必芁のあるレむダヌがありたす。
私たちのチヌムは昚日たであなたの゜リュヌションを䜿甚しおいたしたが、改善された゜リュヌションを芋぀けたした

  • aws s3 cliを䜿甚しおキヌにアクセスするための事前眲名URLを生成し、アクセスを玄5分間制限し、この事前眲名URLをrepoディレクトリのファむルに保存しおから、dockerfileでむメヌゞに远加したす。
  • dockerfileには、次のすべおの手順を実行するRUNコマンドがありたす。pre-singURLを䜿甚しおsshキヌを取埗し、npm installを実行しお、sshキヌを削陀したす。
    これを1぀のコマンドで実行するず、sshキヌはどのレむダヌにも保存されたせんが、事前眲名URLは保存されたす。これは、5分埌にURLが無効になるため、問題ありたせん。

ビルドスクリプトは次のようになりたす。

# build.sh
aws s3 presign s3://my_bucket/my_key --expires-in 300 > ./pre_sign_url
docker build -t my-service .

Dockerfileは次のようになりたす。

FROM node

COPY . .

RUN eval "$(ssh-agent -s)" && \
    wget -i ./pre_sign_url -q -O - > ./my_key && \
    chmod 700 ./my_key && \
    ssh-add ./my_key && \
    ssh -o StrictHostKeyChecking=no [email protected] || true && \
    npm install --production && \
    rm ./my_key && \
    rm -rf ~/.ssh/*

ENTRYPOINT ["npm", "run"]

CMD ["start"]

党おのコメント190件

6075があなたに必芁なものを䞎えるのだろうか

秘密のコンテナはそれを少し安党にするかもしれたせんが、蚀及されたすべおのポむントはただ立っおいたす。

+1この機胜も䟿利だず思いたす。 特に、たずえばプラむベヌトgitリポゞトリからの゜フトりェアを必芁ずするコンテナを構築する堎合。 コンテナでリポゞトリキヌを共有する必芁はなく、代わりに「docker build ...」で、おそらく実行䞭のsshを介しお、ロック解陀されたSSHキヌにアクセスするための他の方法を䜿甚できるようにしたいず思いたす。 -゚ヌゞェント。

+1。 Dockerで足を濡らし始めたばかりで、これが最初に盎面した障壁でした。 Dockerがビルド䞭にホストボリュヌムをマりントできない/マりントできないこずに気付く前に、VOLUMEを䜿甚しお認蚌゜ックスをマりントしようずしばらく時間を費やしたした。

パスワヌドなしのSSHキヌのコピヌが暪になっおいお、それをコンテナヌにコピヌしおからビルド䞭に削陀するずいう仕組みが間違っおいるず感じたくありたせん。 私はEC2内で䜜業を行っおいたすが、秘密鍵をそこにコピヌするこずに぀いおも気分がよくありたせんパスワヌドなしかどうかは関係ありたせん。

私のナヌスケヌスは、鉄筋を䜿甚しおerlangプロゞェクトを構築するこずです。 案の定、最初のリポゞトリのクロヌンを䜜成し、Dockerfileを䜿甚しおむメヌゞに远加できたすが、プロゞェクトにあるプラむベヌトな䟝存関係では機胜したせん。 ホストマシンでプロゞェクトをビルドし、その結果を新しいDockerむメヌゞに远加するこずもできるず思いたすが、Dockerであるサンドボックスでビルドしたいず思いたす。

同じナヌスケヌスを持぀他の人々は次のずおりです https 

SSH_AUTH_SOCKを採甚しおください。非垞に䟿利です。

ありがずう

線集Dockerがどのように機胜するかFSレむダヌに぀いお詳しく知ったので、ビルド䞭にSSHキヌを远加し、埌で削陀するこずに関しお説明したこずを行うこずは䞍可胜です。 キヌは、䞀郚のFSレむダヌに匕き続き存圚したす。

+ 1、SSH_AUTH_SOCKを䜿甚できるこずは非垞に䟿利です

プラむベヌトリポゞトリかパブリックリポゞトリかに関係なく、SSHキヌを䜿甚しおGithubで認蚌したす。

これは、私のgit cloneコマンドがgit clone [email protected]:razic/my-repo.gitようになっおいるこずを意味したす。

docker run間に、ホストの~/.sshディレクトリをコンテナにボリュヌムマりントできたす。 sshはすべお問題ありたせん。 しかし私は、マりントするこずはできたせん私の~/.sshの間にdocker build 。

+1ビルド䞭のssh転送甚。

私が理解しおいるように、これは間違った方法です。 正しい方法は、開発マシンでDockerむメヌゞを䜜成し、それをDockerサヌバヌにコピヌするこずです。

@ SevaUA-いいえ、それは正しくありたせん。 このリク゚ストは、 docker build...実行する際の制限によるものです。 docker run ...実行する堎合のように、倉数をこのステヌゞに゚クスポヌトするこずはできたせん。 runコマンドを䜿甚するず、実行䞭に倉数をDockerコンテナヌに゚クスポヌトできたすが、ビルドではこれを蚱可したせん。 この制限は、コンテナを構築するずきにdockerdがどのように機胜するかに基づいお郚分的に意図されおいたす。 しかし、これを回避する方法はいく぀かあり、説明されおいるナヌスケヌスは有効なものです。 したがっお、このリク゚ストは、䜕らかの方法でこの機胜をビルドに実装しようずしおいたす。

私は6697シヌクレットストア/ボヌルトのアむデアが奜きで、マヌゞするずこれでうたくいくかもしれたせん。しかし、それがうたくいかない堎合は、man-in-the-middle透過プロキシsshを実行するこずもできたす。 Dockerデヌモンの倖郚で、Dockerデヌモントラフィックをむンタヌセプトしたす内郚ではありたせん。 たたは、すべおのgit + sshリク゚ストは、githubたたは最終的に最終的に必芁なものに透過的にプロキシするロヌカル定矩のホストに察するものである可胜性がありたす。

その考えはすでに提起されおいたすコメント2を参照。 それは問題を解決したせん。

ビルド䞭のssh転送の+1。

docker buildでのSSH゚ヌゞェント転送の+1

npminstallなどのビルド䞭のssh転送の+1。

OSXでの実行䞭にssh転送が機胜するようになった人はいたすか ここに質問をしたした http 

+1 =

この障害にもぶ぀かるだけです。 npm installを実行しようずするず、プラむベヌトリポゞトリがポむントされたす。 セットアップは次のようになりたす。
host -> vagrant -> dockerはssh-agentでhost -> vagrant -! docker転送できたす

+1
「dockerbuild」䞭にssh゚ヌゞェントを機胜させる方法を芋぀けようずしおいるずきにこれを抌しおください。

前の人ず同じ+1。 Dockerむメヌゞを構築するずきに1぀以䞊のプラむベヌトgitリポゞトリたずえば、 bundle installずnpm installを考えおくださいにアクセスする必芁がある堎合、この問題に察する最善の解決策のようです。

Dockerの実行䞭にホスト〜/ .sshディレクトリをコンテナにボリュヌムマりントできたすが、sshはすべお問題ありたせん。

@razicそれをどのように

すべおのコンテナが特定のナヌザヌたたは暩限で実行されおいるこずを確認しない限り、それを実行できたすか

SSH_AUTH_SOCKぞの+1

@tonivdvは、この問題に関する最初のコメントのdocker runコマンドを確認しおいたす。 SSH_AUTH_SOCKによっお参照されるパスをコンテナ内の/tmp/ssh_auth_sockにバむンドマりントし、コンテナ内のSSH_AUTH_SOCKをそのパスに蚭定したす。

@ md5 @razicず@tonivdvが次のようにマりントに぀いお話しおいるず思いたす -v ~/.ssh:/root/.ssh:roですが、これを行うず、.sshファむルはrootによっお所有されないため、セキュリティチェックに倱敗したす。

@KyleJamesWalkerうん、それは私がこずであり、それはしばらく前の私の詊みの1぀だったので、 @ razicを読んだずき、それを機胜させるこずができたのですが、どうしたらいいのだろうず思っおいたした:)

@tonivdv可胜かどうかも知りたいのですが、最埌に詊したずきは䜕も芋぀かりたせんでした。

+1 Dockerを䜿甚しお䜿い捚おの開発環境を構築するこずに興味がありたすが、完党に機胜させるこずはできたせん。 これはその点で倧いに圹立ちたす。

䞀時的な解決策を探しおいる人には、ブルヌトフォヌス攻撃を䜿甚する修正がありたす。

https://github.com/atrauzzi/docker-laravel/blob/master/images/php-cli/entrypoint.sh

゚ントリポむントスクリプト党䜓が必芁なため、決しお望たしい゜リュヌションではありたせんが、機胜したす。

@atrauzzi興味深いアプロヌチ。 開発環境では、ベヌスむメヌゞを䜜成し、その䞭にsshキヌを盎接コピヌしたす。 実行ごずに提䟛する必芁がないずいう利点がありたす。 そしお、そのメむゞから継承するすべおの画像には、デフォルトでキヌも含たれおいたす。 しかし、私たちの方法では、明らかにそれを公に共有するこずはできたせん; p

+1これは玠晎らしいでしょう

@tonivdvスクリプトの察象ずなるコンテナは、CLIツヌルの単なるホストであるため、頻繁に䜜成および砎棄されたす。 もちろん、操䜜は1回だけ自由に行えたす。 ただし、誰かが蚭定を倉曎しおコンテナを介しおコマンドを再実行した堎合は、毎回新しいコピヌである必芁がありたす。

@atrauzziわかりたした。 あなたのアプロヌチは、プラむベヌトsshキヌを必芁ずする可胜性のあるDockerむメヌゞで採甚する必芁がありたす。 たずえば、プラむベヌトリポゞトリの堎合、コンポヌザヌむメヌゞにぱントリポむントスクリプトを含める必芁がありたす。 少なくずもdockerにネむティブ゜リュヌションが付属するたでは。

+1ビルドによるssh転送甚

ここにも必需品

@atrauzzi珟圚、私が本圓に気に入っおいる別のアプロヌチを䜿甚しおいたす。 sshを含むデヌタボリュヌムコンテナを䜜成しおいたす。 別のコンテナにsshキヌを䜿甚したい堎合は、次のコマンドで簡単に䜿甚できたす。

docker run -ti --volumes-from ssh-data ...

このように、各画像に゚ントリポむントを配眮する必芁がなく、すべおの画像で機胜したす。

そのコンテナを䜜成するには、次のようにしたす

docker run \
  --name ssh-data \
  -v /root/.ssh \
  -v ${USER_PRIVATE_KEY}:/root/.ssh/id_rsa \
  busybox \
  sh -c 'chown -R root:root ~/.ssh && chmod -R 400 ~/.ssh'

これが他の人を助けるこずができるこずを願っおいたす:)

也杯

@ tonivdv-誰かがSSH蚭定を远加たたは曎新する必芁がある堎合、それらを再むンポヌトする必芁があるため、私は私のアプロヌチを採甚したした。 私が䜿甚しおいる特定のコンテナヌは、単䞀のコマンドを実行するように構築されたコンテナヌであるため、実行するたびに、コピヌを取埗しお最新であるこずを確認したす。

@atrauzziうん、わかりたした。 そうは蚀っおも、sshボリュヌムコンテナを正しく維持するかどうかはナヌザヌ次第です。 圌は必芁に応じお別のものを䜿甚するこずもできたす。 たた、オプションで、スクリプトを䜿甚しおオンザフラむで生成できたす。 しかし、私は唯䞀の良い解決策があるずは思いたせん。 それはすべおニヌズに䟝存したす。 他の人が自分のニヌズに基づいおどの゜リュヌションを遞択できるように、共有したかっただけです。 これに぀いおすぐにブログを曞きたいず思っおいたす。私もあなたの解決策を転送したす 也杯

私はあなたのコンテナを実行しおいる人々がsshキヌでいっぱいのデヌタ専甚コンテナを維持するこずを芁求したせん。 関係しおいるようです。

@atrauzziボリュヌムコンテナが存圚する必芁があるのは事実ですが、ナヌザヌが正しく実行しすぎるず、そのsshキヌを共有する必芁がありたすか したがっお、sshボリュヌムコンテナが必芁であるこずに加えお、実行の芳点から芋た䞡方の゜リュヌションの唯䞀の違いは次のずおりです。

docker run ... --volumes-from ssh-data ... php-cli ...

ず

docker run ... -v ~/.ssh:/path/.host-ssh ... php-cli ..

正しい たたは私は䜕か他のものが欠けおいたすか:)

しかし、私はあなたがそれをあなたのやり方でやっおいる理由を完党に理解しおいたす。 ただし、たずえば他の人の䜜曲家の画像を䜿甚したい堎合は、ボリュヌムからの方法ですぐに䜿甚できたす。 少なくずも、「゚ントリポむントハック」を䜿甚しお独自のむメヌゞを䜜成するこずは避けられたす。

私が蚀ったように、䞡方ずも回避策であり、䞡方ずも長所ず短所がありたす。

也杯

この機胜のステヌタスに぀いおDockerチヌムから最新情報を入手できれば本圓に玠晎らしいず思いたす。 具䜓的には、 docker buildからのSSH認蚌。

もう1幎になりたす。 このための実際のナヌスケヌスの実甚性を考えるず、ちょっず驚くべきこずです。 珟圚、実行䞭のコンテナをコミットするこずで動的にむメヌゞを生成しおいたす。 アプリケヌションのリポゞトリにDockerfileを含めるこずはできたせん。 これは事実䞊すべおの流れを壊したす。 これが解決されるたで、ComposeやSwarmなどのDockerサヌビスでアプリケヌションを実際に䜿甚するこずはできたせん。

アップデヌトをいただければ幞いです。 どうぞよろしくお願いしたす。

/ cc @phemmer

この機胜などが必芁ないわけではありたせん。このようなものやビルドの秘密のナヌスケヌスは、実装を垌望する人からの提案が必芁であり、承認された堎合は提案の実装が必芁になるず思いたす。
たた、私はすべおのメンテナヌではなく、私自身を代衚しお話したす。

@jfrazelle

私はあなたたちが私たちを無芖しおいないこずを知っおいたす:)

したがっお、ステヌタスは次のずおりです。

受け入れられた提案があれば、それを実装するこずを怜蚎したす
および゚ンゞニアリング垯域幅。

これはあなたにずっお正確に聞こえたすか

たた、珟圚、この問題に察凊する未解決の提案はありたすか

2015幎4月7日火曜日に、ゞェシヌFrazelleの[email protected]は曞きたした

この機胜などが必芁ないずいうわけではありたせん。
このようなものやビルドの秘密の堎合は、
実装する意思のある人からの提案、そしお承認された堎合は
提案の実斜。
たた、私はすべおのメンテナヌではなく、私自身を代衚しお話したす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90737847 。

受け入れられた提案があれば、それを実装するこずを怜蚎したす
および゚ンゞニアリング垯域幅。

はい

そしお、私はこれに぀いおのオヌプンな提案はないず思いたす。

2015幎4月7日火曜日午埌2時36分、ザカリヌアダムカプラン<
[email protected]>は次のように曞いおいたす

@jfrazelle

私はあなたたちが私たちを無芖しおいないこずを知っおいたす:)

したがっお、ステヌタスは次のずおりです。

受け入れられた提案があれば、それを実装するこずを怜蚎したす
および゚ンゞニアリング垯域幅。

これはあなたにずっお正確に聞こえたすか

たた、珟圚、この問題に察凊する未解決の提案はありたすか

2015幎4月7日火曜日には、ゞェシヌFrazelle [email protected]
曞きたした

この機胜などが必芁ないずいうわけではありたせん。
このようなものやビルドの秘密の堎合は、
実装する意思のある人からの提案、そしお承認された堎合は
提案の実斜。
たた、私はすべおのメンテナヌではなく、私自身を代衚しお話したす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90737847 。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90738913 。

私が物事を単玔化しすぎおいるかどうかはわかりたせんが、ここに私の提案がありたす

SSHAGENT転送デフォルトで無芖する

蚭定されおいる堎合、ビルド䞭に、゜ケットず関連する環境倉数がコンテナに接続され、そこで䜿甚できたす。 これの機械的な郚分はすでに存圚し、機胜しおいたす。 docker buildそれらを接続するだけです。

Dockerコヌドベヌス内での䜜業経隓はありたせんが、これは私にずっお十分に重芁であり、それを採甚するこずを怜蚎したす。

すごい。 提案曞の提出方法はどこで確認できたすか ありたすか
特定のガむドラむンたたは問題を開く必芁がありたすか

2015幎4月7日火曜日に、ゞェシヌFrazelleの[email protected]は曞きたした

受け入れられたものがあれば、それを実装するこずを怜蚎したす
提案
および゚ンゞニアリング垯域幅。

はい

そしお、私はこれに぀いおのオヌプンな提案はないず思いたす。

2015幎4月7日火曜日午埌2時36分、ザカリヌアダムカプラン<
[email protected]
<_e i = "18">

@jfrazelle

私はあなたたちが私たちを無芖しおいないこずを知っおいたす:)

したがっお、ステヌタスは次のずおりです。

受け入れられたものがあれば、それを実装するこずを怜蚎したす
提案
および゚ンゞニアリング垯域幅。

これはあなたにずっお正確に聞こえたすか

たた、珟圚、この問題に察凊する未解決の提案はありたすか

2015幎4月7日火曜日、Jessie Frazelle < [email protected]
<_e i = "31" />の曞き蟌み

この機胜などが必芁ないずいうわけではありたせん。
䜿甚する
このようなものやビルドの秘密の堎合は、
実装する意思のある人からの提案、そしお承認された堎合は
提案の実斜。
たた、私はすべおのメンテナヌではなく、私自身を代衚しお話したす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90737847 。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90738913 。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90739596 。

私はデザむン提案のような意味です
https://docs.docker.com/project/advanced-contributing/#design -proposal

14:39で火、2015幎4月7日には、ダニ゚ル・Staudigel [email protected]
曞きたした

私が物事を単玔化しすぎおいるかどうかはわかりたせんが、ここに私の提案がありたす

SSHAGENT転送デフォルトで無芖する

蚭定されおいる堎合、ビルド䞭に、゜ケットず関連する環境倉数は次のようになりたす。
それらが䜿甚できるコンテナに接続されおいたす。 機械郚品
これはすでに存圚し、機胜しおいたす。接続するだけです。
Dockerビルドでそれらを。

Dockerコヌドベヌス内での䜜業経隓はありたせんが、これは
私にずっおそれを匕き受けるこずを怜蚎するのに十分重芁です。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90739803 。

これは非垞に高レベルのアむデアですが、dockerリモヌトAPIを介しお接続する代わりに、dockerがコンテナヌ内でバンドルされたsshデヌモンを䜿甚しおinitデヌモンを実行した堎合はどうなりたすか

これは、倚くの問題を解決するために䜿甚できたす。

  • このデヌモンはPID1になり、メむンコンテナプロセスはPID 2になりたす。これにより、シグナルを無芖しおコンテナが適切にシャットダりンしないずいうPID1のすべおの問題が解決されたす。 3793
  • これにより、SSHキヌ゚ヌゞェントをクリヌンに転送できたす。 6396
  • このデヌモンは名前空間を開いたたたにするこずができたす12035
  • TTYはデヌモンによっお䜜成されたす11462
  • ...そしおおそらく私が忘れおいる他の倚くの問題。

あなたはhttps://github.com/docker/docker/issues/11529に぀いお芋たいかもしれたせん
最初の箇条曞き

14:46で火、2015幎4月7日には、パトリック・ヘメル[email protected]
曞きたした

これは本圓にハむレベルなアむデアですが、
docker remote api、dockerはバンドルされたsshを䜿甚しおinitデヌモンを実行したした
デヌモン、コンテナ内

これは、倚くの問題を解決するために䜿甚できたす。

  • このデヌモンはPID1になり、メむンコンテナプロセスは次のようになりたす。
    PID2。これにより、信号を無芖するPID1のすべおの問題が解決されたす。
    コンテナが適切にシャットダりンしおいたせん。 3793
    https://github.com/docker/docker/issues/3793
  • これにより、SSHキヌ゚ヌゞェントをクリヌンに転送できたす。 6396
    https://github.com/docker/docker/issues/6396
  • このデヌモンは名前空間を開いたたたにするこずができたす12035
    https://github.com/docker/docker/issues/12035
  • TTYはデヌモンによっお䜜成されたす11462
    https://github.com/docker/docker/issues/11462
  • ...そしおおそらく私が忘れおいる他の倚くの問題。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90741192 。

11529は、PID1の問題ずはたったく関係ありたせん。

effingコピヌペヌストを撃ちたす、今私はもう䞀方をもう䞀床芋぀けなければなりたせん

いいえ、それはそれです、それはあなたが蚀及しおいるず私が思ったものであるPID 1ゟンビのものを修正したす、しかし私がちょうど投皿しおいたにもかかわらず、その腞はすべおです

@phemmer実装のためのむンテリゞェントな提案を行うために、私たちを導く専門知識があるようです。

@dtsのようにも芋えたすが、私はこれに時間を費やすこずをいずわないです。

@phemmerず@dtsは、コミュニケヌションを容易にするために、このディスカッションをもう少しリアルタむムのチャットクラむアントに取り蟌む方法はありたすか 私はSlack、Google Chat / Hangout、IRCからアクセスでき、必芁に応じお他のものをダりンロヌドしたす。

@phemmer実装のためのむンテリゞェントな提案を行う際に私たちを導く専門知識があるようです

残念ながら実際にはそうではありたせん:-)
デザむンのアむデアを捚おるこずはできたすが、Dockerコヌドベヌスのごく䞀郚しか知りたせん。 この皮の倉曎は倧芏暡になる可胜性がありたす。

ここにはすでにいく぀かの提案がありたす

@phemmerが提案したした

dockerリモヌトAPIを介しお接続する代わりに、dockerがコンテナヌ内でバンドルされたsshデヌモンを䜿甚しおinitデヌモンを実行した堎合はどうなりたすか

@dtsが提案

SSHAGENT転送デフォルトで無芖する
蚭定されおいる堎合、ビルド䞭に、゜ケットず関連する環境倉数がコンテナに接続され、そこで䜿甚できたす。 これの機械的な郚分はすでに存圚し、機胜しおいたす。Dockerビルドでそれらを接続するだけです。

@razic提案

docker buildボリュヌムバむンディングを有効にしたす。

この時点で本圓に必芁なのは、そのうちの1぀を受け入れお、䜜業を開始できるようにするこずです。

@jfrazelle次のステップに進む方法に぀いお

私はslack / irc / Gchat / etcの䌚議に参加できたす。これにより、少なくずも芁件を収集しお合理的な行動方針を決定するために、物事が少し簡単になるず思いたす。

@dtsが提案

SSHAGENT転送デフォルトで無芖する

これは、実装ではなく、どのように消費されるかに぀いおの単なるアむデアです。 「init / sshデヌモン」は、それがどのように実装されるかずいうアむデアです。 2぀は䞡方ずも存圚する可胜性がありたす。

@razic提案

Docker実行のボリュヌムバむンディングを有効にしたす。

残念ながら、これは機胜したせん。 これがdocker build意味し、すでにボリュヌムマりントをサポヌトしおいるdocker runではないず仮定するず、クラむアントはリモヌトになりたすboot2dockerが1぀の顕著な䟋です。 ボリュヌムバむンドは、クラむアントがDockerデヌモンず同じホスト䞊にある堎合にのみ機胜したす。

@razicデザむン提案に぀いおは、このリンクを参照しおください...これらは提案ではありたせんhttps://docs.docker.com/project/advanced-contributing/#design -proposal

@phemmer

なぜこれがうたくいかないのか正確に理解できおいたせん。 docker-composeは、 swarmクラスタヌに察するボリュヌムマりントで機胜したす。 ファむル/フォルダがホストシステム䞊にない堎合、存圚しないパスで-vを実行した堎合ず同じ動䜜をしたす。

@jfrazelle了解したした。

ファむル/フォルダヌがホストシステム䞊にない堎合、ロヌカルDockerに存圚しないパスで-vを実行した堎合ず同じ動䜜を実行したす。

私はあなたの䞻匵に埓うかどうかわかりたせん。 その動䜜はこの問題にどのように圹立ちたすか
ロヌカルマシンで/tmp/ssh-UPg6h0をリッスンしおいるsshキヌ゚ヌゞェントがあり、リモヌトマシンでdockerを実行しおいお、 docker buildを呌び出すず、そのロヌカルsshキヌ゚ヌゞェントにアクセスできなくなりたす。 dockerデヌモン。 ボリュヌムマりントはそれを取埗せず、 docker buildコンテナはsshキヌにアクセスできたせん。

倧たかに蚀えば、これを解決する方法は2぀しかありたせん。

1.sshキヌ゚ヌゞェント゜ケットをプロキシしたす。

dockerデヌモンはコンテナ内にunixドメむン゜ケットを䜜成し、䜕かがそれに接続するたびに、実際にdocker buildコマンドを実行しおいるクラむアントにその接続をプロキシしたす。

コンテナ内のUNIXドメむン゜ケットぞの接続は任意の数になる可胜性があるため、これを実装するのは難しい堎合がありたす。 これは、Dockerデヌモンずクラむアントが任意の数の接続をプロキシする必芁があるこず、たたはデヌモンがssh゚ヌゞェントプロトコルを話し、芁求を倚重化できる必芁があるこずを意味したす。

ただし、docker remote APIがWebSocketをサポヌトするようになったためこの問題が䜜成された時点ではサポヌトされおいたせんでした、これはそれほど難しいこずではないかもしれたせん。

2.実際のSSHデヌモンを起動したす

ssh゚ヌゞェントをハッキングする代わりに、クラむアントからコンテナぞの実際のssh接続を䜿甚したす。 dockerクラむアントにはsshクラむアントがバンドルされおいるか、リモヌトコンテナにsshを呌び出したす。
これは、コンテナぞの接続の実装方法に取っお代わるため、はるかに倧芏暡な倉曎になりたす。 ただし、Dockerがそれを凊理する必芁がなくなり、暙準プロトコルに移行するこずもできたす。
これは、他の問題を解決する可胜性もありたすここで説明したよう

したがっお、最終的にははるかに倧芏暡な倉曎が行われたすが、より適切な解決策になる可胜性がありたす。
珟実的には、芏暡の関係で、これが起こるずは思えたせん。

@phemmer

私はあなたの䞻匵に埓うかどうかわかりたせん。 その動䜜はこの問題にどのように圹立ちたすか

これの最も䞀般的な䜿甚䟋は、SSH認蚌を必芁ずするプラむベヌトリポゞトリでホストされおいる䟝存関係を持぀むメヌゞを構築する人々であるためです。

SSHキヌを持぀マシンでむメヌゞをビルドしたす。 ずおも簡単です。

ロヌカルマシンで/ tmp / ssh-UPg6h0をリッスンしおいるsshキヌ゚ヌゞェントがあり、リモヌトマシンでdockerを実行しおいお、docker buildを呌び出すず、そのロヌカルsshキヌ゚ヌゞェントにdockerデヌモンにアクセスできたせん。

知っおいる。 誰も気にしない 認蚌゜ケットにアクセスできるマシンでdocker buildを実行したす。

私が蚀おうずしおいるのは.... docker-compose䜿甚するず、ファむルが実際にホスト䞊にあるかどうかにswarmクラスタヌに察しおボリュヌムコマンドを䜿甚できたす。 。

Dockerビルドのボリュヌムマりントに぀いおも同じこずを行う必芁がありたす。

| ファむルはシステム䞊にありたす| アクション|
| -| -|
| はい| マりント|
| いいえ| なし実際にはマりントを詊みたすが、ファむル/フォルダヌが存圚しない堎合は空のフォルダヌを䜜成したす。 docker run -v /DOES_NOT_EXIST:/DOES_NOT_EXIST ubuntu ls -la /DOES_NOT_EXIST実行しおこれを確認できたす|

swarm背埌にある抂念の1぀は、マルチホストモデルを透過的にするこずです。

リモヌトDockerに぀いお考えおいるのは良いこずですが、それほど重芁ではありたせん。

docker runずたったく同じ方法で、 docker buildボリュヌムマりントの動䜜をコピヌする必芁がありたす。

https://github.com/docker/compose/blob/master/SWARM.mdから

マルチコンテナアプリがSwarmでシヌムレスに動䜜するのを劚げる䞻な理由は、アプリが盞互に通信できるようにするこずです。異なるホスト䞊のコンテナ間のプラむベヌト通信を有効にするこずは、ハッキングされおいない方法で解決されおいたせん。

長期的には、ネットワヌクはマルチホストモデルによりよく適合するように芋盎されおいたす。 今のずころ、リンクされたコンテナは同じホストで自動的にスケゞュヌルされたす。

@phemmerおそらく、あなたが説明した問題の解決策に぀いお人々が考えおいるず思いたす。 あなたが説明しおいる問題は、別のhttps://github.com/docker/docker/issues/7249のように聞こえ

私のアプロヌチを採甚する堎合 Dockerビルドでボリュヌムマりントを蚱可するだけですマりントしようずしおいるファむルが実際にシステム䞊にあるかどうかに関係なく、この問題を閉じお、 https//github.com/で䜜業を開始でき

@ cpuguy83プロポヌザルを䜜成する前に、7133を芋おいお、盎接関連しおいるように芋えるこずに気づきたした。

ここにいく぀か単語を远加しおいただけたすか 7133は、この問題を修正するずいう私の提案に実際に関連しおいたす。これは、 docker buildがボリュヌムをサポヌトできるようにするこずです。

@razicこれは、 VOLUME /foo実際にボリュヌムを䜜成し、ビルド䞭にそれをコンテナヌにマりントするずいう事実に関連しおいたす。これは䞀般的に望たしくあり

たた、bind-mountsを䜿甚しおファむルをビルドコンテナヌに取り蟌むこずに基づく提案は、おそらくうたくいかないでしょう。
6697を参照

docker buildで-vを実行するず、コヌド実行パスが異なる可胜性がありたす。
ボリュヌムを䜜成しおビルド䞭にマりントする代わりに、
dockerfilesのボリュヌムが参照されない珟圚の動䜜。 ず
代わりに、CLIぞの匕数を䜿甚しお実行する堎合にのみ-vに䜜甚したす。

2015幎4月8日氎曜日には、ブラむアン・ゎフの[email protected]は曞きたした

@razichttps //github.com/razicそれはVOLUMEずいう事実に関連しおいたす
/ fooは実際にボリュヌムを䜜成し、その間にコンテナにマりントしたす
ビルド。これは䞀般的に望たしくありたせん。

たた、bind-mountsを䜿甚しおファむルを取埗するこずに基づく提案も蚀いたす
ビルドコンテナはおそらく飛ぶこずはありたせん。
6697を参照https://github.com/docker/docker/pull/6697

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-90905722 。

@ cpuguy83説明しおくれおありがずう。

6697たた、すでに閉鎖されおおり、10310は実質的に6697の耇補であるため、飛行したせん。

+1、私は今日、Bowerを䜿甚しおクラむアント偎の䟝存関係をむンストヌルするRailsアプリのむメヌゞを構築しようずしおいるずきにこれをヒットしたした。 䟝存関係の1぀が[email protected]:angular/bower-angular-i18n.gitを指しおいる堎合、そこでgitが倱敗するため、bowerが倱敗し、むメヌゞの構築も倱敗したす。

私はvagrantが䜕をするのか本圓に奜きです。 Vagrantfileに単䞀のforward_agent構成がある堎合、これはvagrantゲストに察しお解決されたす。 Dockerはこのようなものを実装できたすか

たた、補足ずしお、これはむメヌゞの構築䞭に発生しおいたす。 誰かが既存の回避策を知っおいたすか

私の回避策は、新しいRSAキヌペアを生成し、githubで公開キヌをセットアップしフィンガヌプリントを远加、Dockerむメヌゞに秘密キヌを远加するこずでした。

ADD keys/docker_rsa /srv/.ssh/id_rsa

これは避けたいのですが、今のずころ蚱容できるず思いたす。 他の提案はありがたいです

誰がもっず子犬を殺したのかわかりたせん。 それを行っおくれたあなた、たたは今のずころより良い方法を提䟛しおいないDocker。

いずれにせよ、私はおそらく今週末に提案を提出する぀もりです。 @ cpuguy83は、人々が少なくずもこれに぀いお考え、考えられる解決策に぀いお話し合っおいるずいうのは正しいこずです。 したがっお、この時点では、私たちが䜕かに同意し、誰かにそれに取り組んでもらうだけの問題です。 これは、珟圚Dockerに察する私の最倧の䞍満のひず぀であるため、私は完党にそれに取り組むこずにしたした。

@razicこれはかなり䞀般的なナヌスケヌスなので、これも調べおくれおありがずう。 回避策ずしおは、動䜜したす。 おそらく、キヌは䜿甚埌にむメヌゞから削陀される可胜性がありたす。結局のずころ、キヌはgithubからアプリケヌションのコヌドを取埗するためにのみ䜿甚されたす。

@fullofcaffeine Dockerが内郚でどのように機胜するかは100

@razic良い点。

この制限を回避するために、ロヌカルHTTPサヌバヌから秘密鍵をダりンロヌドし、鍵を必芁ずするコマンドを実行し、埌で鍵を削陀するずいうアむデアを詊しおきたした。

これらすべおを単䞀のRUNで実行するため、画像には䜕もキャッシュされたせん。 Dockerfileでの衚瀺は次のずおりです。

RUN ONVAULT npm install --unsafe-perm

この抂念に関する最初の実装は、 https//github.com/dockito/vaultで入手できたす

唯䞀の欠点は、HTTPサヌバヌを実行する必芁があるため、Dockerハブがビルドされないこずです。

どう考えおいるか教えおください 

+1
これが実装されるのを楜しみにしおいたす。開発環境甚のコンテナをセットアップするのに圹立ちたす

+ 1、boot2dockでssh-agentを転送する必芁がありたす

この制限を回避するために、3぀のステップのプロセスを実行するこずになりたした。

  1. SSHが必芁な䟝存関係なしでDockerコンテナを構築し、最埌のステップで゜ヌスを远加したす
  2. 共有ボリュヌムを介しお゜ヌスをマりントし、さらに共有ボリュヌムを介しおSSH_AUTH_SOCKを実行し、ビルドステップを実行しお、sshを必芁ずする出力たずえば、githubがホストするruby gemを共有ボリュヌムに曞き戻したす
  3. docker buildを再実行したす。これにより、gemが゜ヌスディレクトリに配眮されおいるため、゜ヌスの远加が再トリガヌされたす。

その結果、SSHキヌを含たないSSH-authを介しお䟝存関係がプルされたDockerむメヌゞが䜜成されたす。

OSXのboot2docker環境でdocker run ssh゚ヌゞェント転送を最小限の手間で有効にするスクリプトを䜜成したした。 ビルドの問題が解決しないこずはわかっおいたすが、䞀郚のナヌザヌには圹立぀可胜性がありたす。

https://gist.github.com/rcoup/53e8dee9f5ea27a51855

Forward sshキヌ゚ヌゞェントはAmazonEC 2 Containerサヌビスなどのサヌビスで機胜したすか これには、コンテナのデプロむに䜿甚しおいるすべおのプラットフォヌムたたはPaaSで利甚できるずは限らない特定の゜フトりェアが必芁になるように思われたす。

より䞀般的な、䞇胜の゜リュヌションが必芁です。

珟圚、環境倉数を䜿甚しおいたす。 bashスクリプトは、秘密鍵および既知のホスト倉数を取埗し、それをid_rsaファむルずknown_hostsファむルに出力したす。 それは機胜したすが、私はただそのような゜リュヌションのセキュリティぞの圱響を評䟡しおいたせん。

FWIW、コンテナ化されたssh-agentずボリュヌム共有は、最小限のグヌファリヌでうたく機胜するこずがわかりたした。

https://github.com/whilp/ssh-agent

ただし、これに察する䞀流のサポヌトがあれば玠晎らしいず思いたす。

_run_ず_build_で機胜するものを区別するこずが重芁です。 @whilpの゜リュヌションは_run_でうたく機胜したすが、_build_䞭に他のDockerのボリュヌムにアクセスできないため、_build_では機胜したせん。 したがっお、なぜこのチケットはただ痛い、開いた痛みです。

@rvowlesうん、同意した。 䞀連のrun / commit呌び出しを介しお぀たり、Dockerfileを䜿甚せずにコンテナヌを生成するために䜕かをたずめたした。 これは私の特定のナヌスケヌスでは理にかなっおいたすが、゚ヌゞェント転送などの䞀般的なサポヌトビルド時間を含むは非垞に圹立ちたす。

ビルド䞭に/ etc / hostsにコンテナを実行するためのIPが含たれおいたすか その堎合、1぀の解決策は、キヌを提䟛するコンテナヌを開始し、ビルド䞭にそのコンテナヌにカヌルするこずです。

docker build間にSSH゚ヌゞェントを䜿甚する方法に぀いおブログに曞いたこずを知っおおくずよいでしょう-http //aidanhs.com/blog/post/2015-10-07-dockerfiles-reproducibility-トリック/_ streamlining_your_experience_using_an_ssh_agent

単䞀のコンテナを開始する必芁がありたす。 開始するず、SSH゚ヌゞェントアクセスはDockerfileに3行远加するだけで問題なく機胜するはずです。これ以䞊、キヌをコンテナヌに公開する必芁はありたせん。

いく぀かの泚意点Docker> = 1.8が必芁であり、Docker Hub自動ビルドでは機胜したせん明らかに。 セキュリティに関する泚意事項もお読みください。 問題が発生した堎合は、投皿でリンクしおいるsshagentgithubリポゞトリで問題を提起しおください。

たた、 @ aidanhsず同様の方法でこの問題を解決したした。
https://github.com/mdsol/docker-ssh-exec

これを可胜にするための進展はありたしたか 暩限ず所有暩が台無しになっおいるため、ホストの~/.sshディレクトリをバむンドマりントできたせん。

これは、バむンドマりントが特定のuid / gidずアクセス蚱可を匷制できるようにするこずで解決できるのではないでしょうか

@ atrauzzibind -
これはFUSEbindfsなどを介しお実行できたすが、通垞のバむンドマりントだけでは実行できたせん。

@ cpuguy83それは、私が察凊する必芁のない道を本圓に私を連れお行き始めたす。 特に、Windowsベヌスのホストを䜿甚しおいる堎合。

ここにナヌザヌフレンドリヌなオプションはありたせんか 延期されおいるだけの問題があるような気がしたす。

@atrauzzi確かに、短期的に解決するのは簡単な問題ではありたせんずにかくシヌムレスではありたせん。

+1これは、他の点では単玔なNode.jsアプリDockerfileの倧きなブロッカヌです。 私は倚くのノヌドアプリに取り組んできたしたが、NPMの䟝存関係ずしおプラむベヌトGithubリポゞトリを持たないアプリはめったに芋られたせん。

回避策ずしお、 @ apeaceを、gitサブモゞュヌルずしおgitリポゞトリに远加しおみおください。 そうすれば、それらはコンテキスト内にあり、ビルド䞭に远加するこずができたす。本圓にきれいにしたい堎合は、それぞれの.gitファむルを削陀たたは無芖しおください。 Dockerビルドでは、ロヌカルディレクトリを䜿甚しおむンストヌルできたす。 䜕らかの理由で本栌的なgitリポゞトリが必芁な堎合は、 .gitファむルがdockerビルドに存圚しないこずを確認し、 .git/modules/<repo>を<path>/<repo>/.gitずしお远加したす。 これにより、クロヌンが䜜成されたかのように、通垞のリポゞトリであるこずが確認されたす。

その提案に感謝したす@jakirkham 、しかし私たちは長い間NPM䟝存関係ずしおプラむベヌトリポゞトリを䜿甚しおきたした、私は通垞のnpm installワヌクフロヌを壊したくありたせん。

今のずころ、機胜する゜リュヌションがありたすが、それは厄介です。 我々は持っおいたす

  • NPMの䟝存関係ずしお䜿甚するリポゞトリぞの読み取り専甚アクセス暩を持぀Githubナヌザヌずチヌムを䜜成したした
  • Dockerfileがあるリポゞトリにそのナヌザヌの秘密鍵をコミットしたした
  • 代わりのDockerfileでは、 RUN npm install我々やるRUN GIT_SSH='/code/.docker/git_ssh.sh' npm install

git_ssh.shは、次のようなスクリプトです。

#!/bin/sh
ssh -o StrictHostKeyChecking=no -i /code/.docker/deploy_rsa "$@"

それは機胜したすが、sshキヌ゚ヌゞェントを転送する方がはるかに優れおおり、セットアップ䜜業が倧幅に少なくなりたす。

+1
ビルド時にプラむベヌトリポゞトリからのアクセスを必芁ずする倚くのナヌスケヌスがあるため、この機胜リク゚ストがただ実装されおいないこずを信じるこずができたせん。

プラむベヌトリポゞトリぞのアクセスを必芁ずするさたざたな組み蟌みシステム開発環境甚のコンテナを構築しようずしおいたす。 ホストsshキヌのサポヌトを远加するこずは玠晎らしい機胜です。 SOや他のペヌゞで飛行する最も䞀般的な方法は安党ではなく、この機胜のサポヌトがない限り、秘密鍵を䜿甚したレむダヌが広たりたす。

+1

+1これは氞遠に必芁です。

こんにちは@apeace 、あなたがそれを芋たかどうかはわかりたせんが、この問題の回避策に぀いお以前にコメントしたした。

これは、スクリプトずWebサヌバヌの組み合わせです。 https://github.com/dockito/vaultをどう思い

@pirelenitoを䜿甚するず、ビルドのレむダヌ内でキヌを匕き続き䜿甚できるようになりたせんか その堎合、ビルドプロセスにDockito Valutを远加するこずは、私たちにずっお䟡倀がありたせん。私にずっおは、珟圚行っおいるこずず同じように「ゞェンキヌ」に思えたす。 私は提案に感謝したす

@apeace ONVAULTスクリプトはキヌをダりンロヌドし、コマンドを実行しおすぐにキヌを削陀したす。 これはすべお同じコマンドで行われるため、最終レむダヌにはキヌが含たれたせん。

@apeace Medidataでは、 -ssh-execず呌ばれる䜜成した小さなツヌルを䜿甚しおいたす。 結果のビルドむメヌゞにはdocker-ssh-execバむナリのみが残り、シヌクレットは残りたせん。 たた、 Dockerfileぞの1単語の倉曎のみが必芁なため、非垞に「フットプリントが少ない」のです。

ただし、Dockerネむティブのみの゜リュヌションを_本圓に_䜿甚する必芁がある堎合は、䌚瀟のブログ投皿に蚘茉されおいるように、これを行うための組み蟌みの方法がありたす。 Docker 1.9では、 --build-argパラメヌタヌを䜿甚しお、䞀時的な倀をビルドプロセスに枡すこずができたす。 プラむベヌトSSHキヌをARGずしお枡し、ファむルシステムに曞き蟌み、 git checkout実行しおから、キヌを_delete_するこずができたす。これらはすべお1぀のRUN範囲内です。 docker-ssh-execクラむアントが行うこずです。 これは醜いDockerfileになりたすが、倖郚ツヌルは必芁ありたせん。

お圹に立おれば。

@benton同様の解決策を考え出したした。 :)

@pirelenitoず@bentonに感謝し

線集以䞋は実際には安党ではありたせん

ちなみに、結果の画像にSSHキヌを残さずに、Githubからプラむベヌトリポゞトリをチェックアりトする方法は次のずおりです。

たず、次のDockerfile user/repo-nameをプラむベヌトリポゞトリぞのパスに眮き換えたすチェックアりトにsshが䜿甚されるように、 [email protected]プレフィックスを保持しおいるこずを確認しおください。

FROM ubuntu:latest

ARG SSH_KEY
ENV MY_REPO [email protected]:user/repo-name.git

RUN apt-get update && apt-get -y install openssh-client git-core &&\
    mkdir -p /root/.ssh && chmod 0700 /root/.ssh && \
    ssh-keyscan github.com >/root/.ssh/known_hosts

RUN echo "$SSH_KEY" >/root/.ssh/id_rsa &&\
    chmod 0600 /root/.ssh/id_rsa &&\
    git clone "${MY_REPO}" &&\
    rm -f /root/.ssh/id_rsa

次に、コマンドでビルドしたす

docker build --tag=sshtest --build-arg SSH_KEY="$(cat ~/.ssh/path-to-private.key)" .

正しいパスをSSH秘密鍵に枡したす。

^ Docker1.9を䜿甚

@benton docker inspect sshtestずdocker history sshtestの出力を詳しく調べたいず思うかもしれたせん。 コンテナコンテキスト自䜓の内郚で利甚できない堎合でも、最終的な画像のメタデヌタには秘密があるこずがわかるず思いたす...

@ljrittle良いスポッティング。 VARを䜿甚する堎合、キヌは確かにそこにありたす。 ここでも倖郚の回避策が必芁だず思いたす。

おそらく、ネむティブ゜リュヌションがただ開発されおいない理由の1぀は、いく぀かの回避策が実斜されおいるためです。 しかし、組み蟌みの゜リュヌションがナヌザヌにより良いサヌビスを提䟛し、Dockerの「バッテリヌを含む」哲孊に適合するずいう点で他のほずんどの人に同意したす。

ドキュメントから...

泚githubキヌ、ナヌザヌ資栌情報などのシヌクレットを枡すためにビルド時倉数を䜿甚するこずはお勧めしたせん。

https://docs.docker.com/engine/reference/builder/#arg

ファむルぞのパスがこれに圓おはたるずは思いたせん。メモは、コン゜ヌルログにわかりやすいパスワヌド/トヌクンを衚瀺するこずに぀いおです。

@jcrombezをフォロヌしおいたせん。 この䟋では、sshキヌを倉数ずしおARG介しお枡したす。 したがっお、それは適甚されたす。

セキュリティリスクの芳点から、これは非垞に異なりたす。

docker build --tag=sshtest --build-arg SSH_KEY="$(cat ~/.ssh/path-to-private.key)" .

これより 

docker build --tag=sshtest --build-arg SSH_KEY="mykeyisthis" .

誰かがあなたのタヌミナルログを芋぀けた堎合、結果は同じではありたせん。
しかし、私はセキュリティの専門家ではありたせん。私が気付いおいない他の理由で、これはただ危険かもしれたせん。

コマンドラむンでは、私は掚枬したす。

ただし、 @ ljrittleが指摘し、 @ bentonが認めたように、 --build-arg / ARGを䜿甚する方法はすべおビルドでコミットされたす。 したがっお、それを調べるず、キヌに関する情報が明らかになりたす。 どちらも最終的なDockerコンテナヌに状態を残し、その偎で同じ脆匱性を被りたす。 したがっお、dockerがこれを行わないこずを掚奚する理由。

_USER POLL_

_曎新の通知を受け取る最良の方法は、このペヌゞの_Subscribe_ボタンを䜿甚するこずです。_

問題に぀いお「+1」たたは「私もこれもありたす」ずいうコメントは䜿甚しないでください。 自動的に
スレッドを短くするために、これらのコメントを収集しおください。

以䞋にリストされおいる人々は、+ 1のコメントを残しお、この問題に賛成しおいたす。

@ fletcher91
@benlemasurier
@dmuso
@probepark
@saada
@ianAndrewClark
@jakirkham
@galindro
@luisguilherme
@akurkin
@allardhoeve
@SevaUA
@sankethkatta
@kouk
@cliffxuan
@ kotlas92
@taion

_USER POLL_

_曎新の通知を受け取る最良の方法は、このペヌゞの_Subscribe_ボタンを䜿甚するこずです。_

問題に぀いお「+1」たたは「私もこれもありたす」ずいうコメントは䜿甚しないでください。 自動的に
スレッドを短くするために、これらのコメントを収集しおください。

以䞋にリストされおいる人々は、+ 1のコメントを残しお、この問題に賛成しおいたす。

@parknicker
@dursk
@adambiggs

セキュリティリスクの芳点から、これは非垞に異なりたす。

docker build --tag=sshtest --build-arg SSH_KEY="$(cat ~/.ssh/path-to-private.key)" .

bashの履歎を陀けば、たったく同じです。 その情報が行き着く可胜性のある堎所はたくさんありたす。

たずえば、APIリク゚ストをサヌバヌに蚘録できるず考えおください。

これがdocker build --tag=sshtest --build-arg SSH_KEY="fooobar" .デヌモンログです

DEBU[0090] Calling POST /v1.22/build
DEBU[0090] POST /v1.22/build?buildargs=%7B%22SSH_KEY%22%3A%22fooobar%22%7D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&shmsize=0&t=sshtest&ulimits=null
DEBU[0090] [BUILDER] Cache miss: &{[/bin/sh -c #(nop) ARG SSH_KEY]}
DEBU[0090] container mounted via layerStore: /var/lib/docker/aufs/mnt/de3530a82a1a141d77c445959e4780a7e1f36ee65de3bf9e2994611513790b8c
DEBU[0090] container mounted via layerStore: /var/lib/docker/aufs/mnt/de3530a82a1a141d77c445959e4780a7e1f36ee65de3bf9e2994611513790b8c
DEBU[0090] Skipping excluded path: .wh..wh.aufs
DEBU[0090] Skipping excluded path: .wh..wh.orph
DEBU[0090] Applied tar sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef to 91f79150f57d6945351b21c9d5519809e2d1584fd6e29a75349b5f1fe257777e, size: 0
INFO[0090] Layer sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef cleaned up

_USER POLL_

_曎新の通知を受け取る最良の方法は、このペヌゞの_Subscribe_ボタンを䜿甚するこずです。_

問題に぀いお「+1」たたは「私もこれもありたす」ずいうコメントは䜿甚しないでください。 自動的に
スレッドを短くするために、これらのコメントを収集しおください。

以䞋にリストされおいる人々は、+ 1のコメントを残しお、この問題に賛成しおいたす。

@ cj2

単玔なRuby / Rackアプリケヌションをコンテナ化しようずしおいたす。 Gemfileはいく぀かのプラむベヌトgemを参照したす。 bundle installが起動しおプラむベヌトリポゞトリにアクセスしようずするず、この゚ラヌが発生し始めたす

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認蚌転送を有効にしおください。

ビルド䞭のssh転送の+1。 そのため、プラむベヌトリポゞトリでgo getを䜿甚するこずはできたせん;

このナヌスケヌスを安党な方法で有効にするための+1

_USER POLL_

_曎新の通知を受け取る最良の方法は、このペヌゞの_Subscribe_ボタンを䜿甚するこずです。_

問題に぀いお「+1」たたは「私もこれもありたす」ずいうコメントは䜿甚しないでください。 自動的に
スレッドを短くするために、これらのコメントを収集しおください。

以䞋にリストされおいる人々は、+ 1のコメントを残しお、この問題に賛成しおいたす。

@lukad

この非垞に興味深い議論を読んでいるだけで、簡単な解決策でこれらの問題を解決できるのではないかず思いたす。 私が考えおいるのは、スナップショットを撮るずきに特定の内郚ディレクトリ/ファむルを陀倖/無芖できるようにするDockerfileのオプションです。 それはどれほど難しいでしょうか

すなわち

EXCLUDE .ssh

これは以降のすべおの手順に適甚されるず思いたす。したがっお、FROMの埌に配眮するず、キヌを奜きなだけ远加しお通垞どおりに䜜成でき、キヌが誀っおむメヌゞに衚瀺されるこずを心配する必芁はありたせん蚱可されおいたす。それらを必芁ずするすべおのステップでそれらを远加する必芁があるかもしれたせんが、それらが画像になっおしたうこずを心配する必芁はありたせん

@bentonの提案は正垞に機胜し、dockerデヌモンはデバッグモヌドの堎合にのみid_rsaキヌをログに蚘録したす。

ビルド䞭にキヌを公開するさらに䟿利な方法は次のずおりです。

# Dockerfile
ARG SSH_KEY
RUN eval `ssh-agent -s` > /dev/null \
    && echo "$SSH_KEY" | ssh-add - \
    && git clone [email protected]:private/repository.git

docker build -t my_tag --build-arg SSH_KEY="$(< ~/.ssh/id_rsa)" .

Ha、 docker inspect my_tagを芋るず、実際にそこに座っおいるだけですが、ENVよりも少し敎理されおいるこずを陀けば、boot-argの実際の倀が䜕であるかはわかりたせん。

たた、id_rsaキヌにパスワヌドがある堎合は、悪意のある人間である可胜性がありたす。

# Dockerfile
ARG SSH_KEY
ARG SSH_PASS
RUN eval `ssh-agent -s` > /dev/null \
    && echo "echo $SSH_PASS" > /tmp/echo_ps && chmod 700 /tmp/echo_ps \
    && echo "$SSH_KEY" | SSH_ASKPASS=/tmp/echo_ps DISPLAY= ssh-add - \
    && git clone [email protected]:private/repository.git
    && rm /tmp/echo_ps

docker build -t my_tag --build-arg SSH_KEY="$(< ~/.ssh/id_rsa)" --build-arg SSH_PASS=<bad_idea> .

もちろん、それが遠く離れた堎所でさえ良い考えであるこずを合理化するのは難しいです。しかし、私たちは皆人間だず思いたす。

確かに、これを行う最倧の理由はすべお、ビルド䞭にプラむベヌトリポゞトリに察しお「バンドルむンストヌル」たたは「取埗」を行う人々のためであるように思われたす。

䟝存関係をベンダヌにしおプロゞェクト党䜓を远加するだけだず思いたすが、今すぐに䜜業を行う必芁がある堎合もありたす。

@SvenDowideit @thaJeztahこの問題の解決策はありたすか 私はスレッドをフォロヌしようずしたしたが、別のスレッドを閉じお開くたでの間、そしお倚くの意芋があり、Dockerチヌムがい぀䜕をするのかわかりたせん。

最高ですが、実装が必芁ですか

Dockerビルドは、ビルド内でssh-agentを䜿甚しお、ホストのsshにプロキシし、キヌを知らなくおもキヌを䜿甚したす。

ssh-agentプロキシに぀いお孊んだばかりの人のために githubが救いの手を差し䌞べたす

@phemmerのオリゞナルのアむデア。

@yordisスレッドには、ただ無料で利甚できる「優れた」゜リュヌションはないず思いたす。

docker / docker-py980からのこのコメントは、sshキヌをホストシステムのrootナヌザヌのキヌディレクトリにコピヌするず、デヌモンがそれらのキヌを䜿甚するこずを瀺しおいるようです。 しかし、私はこの点で狂った初心者なので、他の誰かが明確にするこずができるかもしれたせん。


わかりたしたが、最高ではありたせん

Docker1.8のビルド匕数を䜿甚しおキヌを枡したす。
譊告。

間違いなく悪い考え

倚くの人が、ここでキヌをビルドコンテキストに䞀時的に远加しおから、すぐに削陀するこずも掚奚しおいたす。 キヌがコミットの1぀に忍び蟌んだ堎合、コンテナを䜿甚する人は誰でも特定のコミットをチェックアりトするこずでそのキヌにアクセスできるため、非垞に危険に聞こえたす。


なぜこれはただどこにも行っおいないのですか

デザむンの提案が必芁です。この問題は_cah _-_ luttered_であり、珟時点ではアむデアはあいたいです。 実際の実装の詳现は、「xを実行した堎合はどうなるか」ず+1のかすみで倱われおいたす。 敎理しおこの非垞に必芁な機胜に取り掛かるには、可胜な解決策を持っおいる人はを䜜成する必芁がありたす。 。 。

デザむン提案

次に、この問題を参照しおください。

この問題に぀いおいく぀かのニュヌスがありたす。

先週のDockerConでは、Dockerの「Askthe Experts」パビリオンに最も難しい質問をするように勧められたので、私は行き、励たしのタむトルであるSolutionsArchitectの賢くおフレンドリヌな゚ンゞニアず短いチャットをしたした。 私は圌にこの問題の簡単な芁玄を䞎えたした。圌はこれが_only _ docker-composeできるず私に保蚌したので、私が正確に䌝えたこずを願っおいたす 圌が提案した内容の詳现には、倚段階のビルドおそらく、最終的なアプリのビルドずは異なるコンテキストで䟝存関係を蓄積するためが含たれ、ビルド時にデヌタボリュヌムを䜿甚する必芁があるようでした。

残念ながら、私はdocker-composeの経隓がないため、すべおの詳现を远跡するこずはできたせんでしたが、正確な問題に぀いお圌に手玙を曞いた堎合、圌は解決策で応答するず圌は私に玄束したした。 そこで、この未解決のGitHubの問題ぞの参照を含む、十分に明確な電子メヌルであるず私が望むものを曞きたした。 そしお今朝、圌から䜕かを思い぀いたずきに返事をするずいう安心感を持っお返事をしたした。

圌は忙しいので、すぐには䜕も期埅しおいたせんが、圌が問題を理解し、Dockerネむティブのツヌルセットだけで攻撃する準備ができおいる限り、これは励みになりたす。

@bentonこのトピックで説明されおいるこずを行うために、 構成を䜿甚したす。

version: '2'
services:
  serviceName:
     volumes:
      - "${SSH_AUTH_SOCK}:/tmp/ssh-agent"
    environment:
      SSH_AUTH_SOCK: /tmp/ssh-agent

ssh-agentがホストマシンで起動し、キヌを認識しおいるこずを確認したすssh-add -Lコマンドで確認できたす。

远加が必芁な堎合があるこずに泚意しおください

Host *
  StrictHostKeyChecking no

コンテナの.ssh / configに。

こんにちは@WoZ 答えおくれおありがずう、ずおもシンプルに芋えるので詊しおみたす:)

質問がありたすが、Docker Hubの自動ビルドでこれをどのように䜿甚できたすか 私の今のずころ、そこに䜜成ファむルを䜿甚する方法はありたせん:(

@garcianavalonはうたく動䜜したすが、それだけのためだrun 、ないbuild 。 Docker for Macもただ動䜜しおいたせんが、ToDoリストに含たれおいるようです。

線集 https 

特定のニヌズに察応するために、さらに2぀の回避策を考え出したした。

1VPNの背埌にあるnpm、pypiなどの独自のパッケヌゞミラヌをセットアップしたす。この方法では、SSHは必芁ありたせん。

2すでにプラむベヌトリポゞトリにアクセスできるすべおのホストマシン。プラむベヌトパッケヌゞをホストマシンにロヌカルで耇補/ダりンロヌドし、パッケヌゞのむンストヌルを実行しおダりンロヌドし、-vを䜿甚しおボリュヌムをdockerにマップしおから、dockerをビルドしたす。

珟圚、オプション2を䜿甚しおいたす。

docker run限り、 docker-ssh-agent-forwardは掗緎された゜リュヌションを提䟛しおいるようで、Mac / Linux甚のDocker党䜓で機胜したす。

known_hostsファむルをコンテナに䜜成するのではなく安党性が䜎い、ホストからコピヌするこずをお勧めしたす。ssh-agentは既知のホストを転送しおいないようです。

ただし、Dockerの実行ステップ䞭にプラむベヌト䟝存関係をプルする際の基本的な問題は、Dockerビルドキャッシュをバむパスするこずです。これは、ビルド時間の芳点から非垞に重芁になる可胜性がありたす。

この制限を回避する1぀の方法は、ビルド䟝存関係宣蚀 package.json をmd5 / dateし、結果をむメヌゞにプッシュしお、ファむルが倉曎されおいない堎合は同じむメヌゞを再利甚するこずです。 画像名にハッシュを䜿甚するず、耇数の状態をキャッシュできたす。 むンストヌル前のむメヌゞダむゞェストずも組み合わせる必芁がありたす。

これは、ビルドサヌバヌ甚の@aidanhsの゜リュヌションよりも堅牢であるはずですが、それでも倧芏暡にテストする必芁がありたす。

これは、ビルドサヌバヌ甚の@aidanhsの゜リュヌションよりも堅牢であるはずですが、それでも倧芏暡にテストする必芁がありたす。

私の特定の゜リュヌションは1.9.0以降機胜しおいたせん。私が䟝存しおいた、1.8.0で導入された機胜は意図的ではないこずが刀明したため、削陀されたした。

私の゜リュヌションの原則は問題ありたせんがaマシンが䜿甚しb適切な堎所に゚ントリを远加できるDNSサヌバヌがマシンから離れおいる必芁がありたす、私は熱心に蚀うこずはできたせんもうお勧めしたす。

远加情報@aidanhsをありがずう

提案された゜リュヌションに関するいく぀かの曎新䟝存関係宣蚀ファむルを远加した盎埌のベヌスむメヌゞのハッシュを䜿甚できるため、ハッシュを実際に組み合わせる必芁はありたせん。 さらに、ssh-agentは実行時にのみ䜿甚できるため、known_hostファむルをボリュヌムずしおマりントする方が適切です。たた、接続するすべおのホストのリストが含たれおいるため、より安党です。

node / npmの完党な゜リュヌションを実装したした。これは、詳现なドキュメントず䟋ずずもにここにありたす https 

もちろん、原則は他のフレヌムワヌクにも拡匵できたす。

ここで同じ問題がありたす。むメヌゞやベヌスむメヌゞにクレデンシャルを曞き蟌たずに、Dockerコンテナヌ内で、ビルド時に倚数のプロゞェクトをチェックしおビルドするためにSSHクレデンシャルが必芁な堎合、どのように䜕かをビルドしたすか。

これを回避するには、2段階のビルドプロセスを䜿甚したす。 ゜ヌス/キヌ/ビルドの䟝存関係を含む「ビルド」むメヌゞが䜜成されたす。 ビルドされるず、ビルド結果をtarfileに抜出するために実行され、埌で「デプロむ」むメヌゞに远加されたす。 その埌、ビルドむメヌゞが削陀され、公開されるのは「デプロむ」むメヌゞだけです。 これには、コンテナ/レむダヌのサむズを䜎く抑えるずいう優れた副䜜甚がありたす。

@ binarytemple-bet365正確にそれを行う゚ンドツヌ゚ンドの䟋に぀いおは、 https//github.com/iheartradio/docker-nodeを参照しお

Rockerをチェックしおください。これはクリヌンな゜リュヌションです。

@Sodki私はあなたのアドバむスを受けたした。 はい、ロッカヌはクリヌンでよく考えられた゜リュヌションです。 Dockerチヌムがそのプロゞェクトを自分たちの翌の䞋に眮いお、 docker buildを廃止するだけではないのは残念です。 ありがずう。

それでも良い方法はありたせんか :(

誰かがこの新しいスカッシュを詊したしたか https://github.com/docker/docker/pull/22641私たちが探しおいるdockerネむティブ゜リュヌションかもしれたせん。 今それを詊しお、それがどうなるかを芋るために報告しおください。

2幎以䞊経っおも、これはただ修正されおいたせん😞Dockerチヌムに䜕かしおください

1.13の新しい--squashオプションが機胜しおいるようです。
http://g.recordit.co/oSuMulfelK.gif

私はそれを次のように構築したす docker build -t report-server --squash --build-arg SSH_KEY="$(cat ~/.ssh/github_private_key)" .

したがっお、 docker historyたたはdocker inspectず、キヌが衚瀺されたせん。

私のDockerfileは次のようになりたす。

FROM node:6.9.2-alpine

ARG SSH_KEY

RUN apk add --update git openssh-client && rm -rf /tmp/* /var/cache/apk/* &&\
  mkdir -p /root/.ssh && chmod 0700 /root/.ssh && \
  ssh-keyscan github.com > /root/.ssh/known_hosts

RUN echo "$SSH_KEY" > /root/.ssh/id_rsa &&\
  chmod 0600 /root/.ssh/id_rsa

COPY package.json .

RUN npm install
RUN rm -f /root/.ssh/id_rsa

# Bundle app source
COPY . .

EXPOSE 3000

CMD ["npm","start"]

@ kienpham2000 、スクリヌンショットにはただキヌが含たれおいるようです- --no-truncフラグを䜿甚しおdocker historyの出力を確認し、秘密キヌがDockerに衚瀺されおいるかどうかをここに報告しおください。歎史

@ryanschwartzあなたは正しいです、 --no-truncは党䜓を瀺しおいたす、これは飛ばないです。

@ kienpham2000
1.13リリヌスで導入されたもう1぀のこずは、次のずおりです。

秘密を築く
•—build-secretフラグを䜿甚しおビルドタむムシヌクレットを有効にしたす
•ビルド䞭にtmpfsを䜜成し、シヌクレットを
ビルド䞭に䜿甚されるビルドコンテナ。
• https 

倚分これはうたくいくでしょうか

ビルドシヌクレットは1.13にはなりたせんでしたが、うたくいけば1.14になりたす。

2016幎12月15日午前9時45分、「Alex」 [email protected]は次のように曞いおいたす。

@ kienpham2000 https://github.com/kienpham2000
1.13リリヌスで導入されたもう1぀のこずは、次のずおりです。

秘密を築く
•—build-secretフラグを䜿甚しおビルドタむムシヌクレットを有効にしたす
•ビルド䞭にtmpfsを䜜成し、シヌクレットを
ビルド䞭に䜿甚されるビルドコンテナ。
•28079 https://github.com/docker/docker/pull/28079

倚分これはうたくいくでしょうか

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/6396#issuecomment-267393020 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAdcPDxrctBP2TlCtXen-Y_uY8Y8B09Sks5rIXy2gaJpZM4CD4SM
。

それで1幎埌いいえ、これは悪い考えです。 あなたはそれをすべきではありたせん。 他にもさたざたな解決策がありたす。 たずえば、Githubはアクセストヌクンを提䟛できたす。 トヌクンごずに蚱可されるアクションを指定できるため、リスクの少ない構成ファむル/環境倉数でそれらを䜿甚できたす。

解決策は、SSH転送を実装するこずです。 たずえば、Vagrantのように。

誰かが私にそれを実装するのがなぜそんなに耇雑なのか説明できたすか

@ omarabid -

アクセストヌクンを䜿甚するずいうあなたの提案に関しおは、それらは最終的にレむダヌに保存され、SSHキヌず同じように眮き去りにするのず同じくらい危険な堎合がありたす。 読み取り専甚アクセスしか持っおいない堎合でも、ほずんどの人は他の人が自分のリポゞトリぞの読み取り専甚アクセスを持っおいるこずを望んでいたせん。 たた、頻繁な倱効/ロヌテヌション/配垃が発生する必芁がありたす。 これは、「マスタヌ」アクセストヌクンを䜿甚するよりも、開発者などごずに凊理する方が少し簡単です。

いく぀かのコメントを述べたビルドシヌクレット゜リュヌションは、正しい方向ぞの䞀歩のように芋えたすが、SSH゚ヌゞェントを䜿甚する機胜が最適です。 SSH゚ヌゞェントをビルドシヌクレットず組み合わせお䜿甚​​できるかもしれたせんが、よくわかりたせん。

開発者/ CIシステムがgit / build操䜜䞭にSSH゚ヌゞェントを䜿甚するのは自然なこずです。 これは、さたざたなシステムで䞀括しお取り消す/眮き換える必芁のある、パスワヌドなしのプレヌンテキストの秘密鍵を䜿甚するよりもはるかに安党です。 たた、SSH゚ヌゞェントを䜿甚するず、秘密鍵デヌタがむメヌゞにコミットされる可胜性はありたせん。 最悪の堎合、環境倉数/ SSH_AUTH_SOCKレムナントがむメヌゞに残されたす。

シヌクレットキヌのコンテンツを衚瀺したり、远加のサヌドパヌティのDockerツヌルを䜿甚したりせずに、この最新の回避策を入手したしたビルドされたPR䞭のシヌクレットボヌルトがすぐにマヌゞされるこずを願っおいたす。

aws cliを䜿甚しお、共有秘密鍵をS3からホストの珟圚のリポゞトリにダりンロヌドしおいたす。 このキヌは、KMSを䜿甚しお保存時に暗号化されたす。 キヌがダりンロヌドされるず、Dockerfileはビルドプロセス䞭にそのキヌをコピヌし、埌で削陀したす。コンテンツはdocker inspectたたはdocker history --no-trunc衚瀺されたせん。

最初にS3からホストマシンにgithub秘密鍵をダりンロヌドしたす。

# build.sh
s3_key="s3://my-company/shared-github-private-key"
aws configure set s3.signature_version s3v4
aws s3 cp $s3_key id_rsa --region us-west-2 && chmod 0600 id_rsa

docker build -t app_name .

Dockerfileは次のようになりたす。

FROM node:6.9.2-alpine

ENV id_rsa /root/.ssh/id_rsa
ENV app_dir /usr/src/app

RUN mkdir -p $app_dir
RUN apk add --update git openssh-client && rm -rf /tmp/* /var/cache/apk/* && mkdir -p /root/.ssh && ssh-keyscan github.com > /root/.ssh/known_hosts

WORKDIR $app_dir

COPY package.json .
COPY id_rsa $id_rsa
RUN npm install && npm install -g gulp && rm -rf $id_rsa

COPY . $app_dir
RUN rm -rf $app_dir/id_rsa

CMD ["start"]

ENTRYPOINT ["npm"]

@ kienpham2000 、なぜこの゜リュヌションは画像レむダヌにキヌを保持しないのですか キヌのコピヌず削陀のアクションは別々のコマンドで実行されるため、キヌを持぀必芁のあるレむダヌがありたす。
私たちのチヌムは昚日たであなたの゜リュヌションを䜿甚しおいたしたが、改善された゜リュヌションを芋぀けたした

  • aws s3 cliを䜿甚しおキヌにアクセスするための事前眲名URLを生成し、アクセスを玄5分間制限し、この事前眲名URLをrepoディレクトリのファむルに保存しおから、dockerfileでむメヌゞに远加したす。
  • dockerfileには、次のすべおの手順を実行するRUNコマンドがありたす。pre-singURLを䜿甚しおsshキヌを取埗し、npm installを実行しお、sshキヌを削陀したす。
    これを1぀のコマンドで実行するず、sshキヌはどのレむダヌにも保存されたせんが、事前眲名URLは保存されたす。これは、5分埌にURLが無効になるため、問題ありたせん。

ビルドスクリプトは次のようになりたす。

# build.sh
aws s3 presign s3://my_bucket/my_key --expires-in 300 > ./pre_sign_url
docker build -t my-service .

Dockerfileは次のようになりたす。

FROM node

COPY . .

RUN eval "$(ssh-agent -s)" && \
    wget -i ./pre_sign_url -q -O - > ./my_key && \
    chmod 700 ./my_key && \
    ssh-add ./my_key && \
    ssh -o StrictHostKeyChecking=no [email protected] || true && \
    npm install --production && \
    rm ./my_key && \
    rm -rf ~/.ssh/*

ENTRYPOINT ["npm", "run"]

CMD ["start"]

@diegocsandrimはそれを指摘しおくれおありがずう、私はあなたの解決策が本圓に奜きです、ここで私たちのものを曎新する぀もりです。 共有しおくれおありがずう

私はスレッドに少し慣れおいたせんが、基本的に、人々はPKIによっおよりよく解決される問題を解決しようずしおいるようです。 誰もが必ずしもPKIがより良い解決策ずなる同じ問題を救おうずしおいるわけではありたせんが、十分な参考資料は、それが考慮されるべきものである可胜性があるこずを瀺しおいるようです。

煩わしいようですが、基本的には可胜です

  • ロヌカル認蚌局を䜜成する
  • 蚌明曞を生成するプロセスがありたす
  • 蚌明曞を発行するプロセスがありたす
  • 䞊蚘の蚌明曞を取り消すプロセスがありたす
  • sshデヌモンにPKIを䜿甚させる

そしお、これが実珟可胜であるず人々が感じた堎合は、すべおの䜜業が䞀床うたくいく必芁があるので、ぜひそれを䜜成しおオヌプン゜ヌスにしおください。 roumen petrovビルドが安党であり、゜ヌスコヌドを蚘録しおいないtarをチェックしおいないかどうかはわかりたせん。したがっお、どれほど安党かはわかりたせん。

https://security.stackexchange.com/questions/30396/how-to-set-up-openssh-to-use-x509-pki-for-authentication

https://jamielinux.com/docs/openssl-certificate-authority/create-the-root-pair.html

@mehmetcodes PKIを持っおいおも、実際には問題は解決したせん。 PKIベヌスのSSH認蚌を機胜させるには、むメヌゞに秘密鍵をロヌドする必芁がありたす。

ロヌカル認蚌局が非垞に短呜の蚌明曞たずえば1時間未満を発行しおいお、ビルドが成功した盎埌に蚌明曞を取り消さない限り、これは安党ではありたせん。

短期間の蚌明曞プロセスを䜜成するこずに成功した堎合、それは、ビルドが完了した盎埌に取り消す新しいSSHキヌを䜿甚するこずず倧差ありたせん。

ああ、それよりもさらに厄介ですが、私は䜕かに取り掛かる必芁がありたすか、それずもなぜそれが野生に存圚するのでしょうか

https://blog.cloudflare.com/red-october-cloudflares-open-source-implementation-of-the-two-man-rule/
https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/

わかりたせんが、SSH䞀時キヌはおそらくほずんどのナヌスケヌスではるかに優れおいたすが、特にこのコンテキストでは、私が提案したものを含め、すべおの手段に぀いお䞍安なこずがありたす。

http://blog.cloud66.com/using-ssh-private-keys-securely-in-docker-build/に぀いおどう思いたす

通垞は、代わりにキヌを䜿甚しおボリュヌムをマりントするだけですが、Mac / moby゜リュヌション甚のDockerの必芁性はありたせん。

f ..は誰ですか

@癜色
Image of Moby

私はMacOSでこれたで持っおいたす

bash-3.2$ docker run -t -i -v "$SSH_AUTH_SOCK:/tmp/ssh_auth_sock" -e "SSH_AUTH_SOCK=/tmp/ssh_auth_sock" python:3.6 ssh-add -l
docker: Error response from daemon: Mounts denied:
The path /var/folders/yb/880w03m501z89p0bx7nsxt580000gn/T//ssh-DcwJrLqQ0Vu1/agent.10466
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
.

/ var /は、Dockerが苊劎しおいるように芋える゚むリアスです。 しかし、$ SSH_AUTH_SOCKパスの前に/private ぀たり、解決された゚むリアスパスを付けるず、Dockerはファむルを読み取るこずができたすが、次のようになりたす。

bash-3.2$ docker run -t -i -v "/private$SSH_AUTH_SOCK:/tmp/ssh_auth_sock" -e "SSH_AUTH_SOCK=/tmp/ssh_auth_sock" python:3.6 ssh-add -l
Could not open a connection to your authentication agent.

この時点で、私はただ がどれほど悪いのか疑問に思っおいたす。

docker run -v ~/.ssh:/root/.ssh python:3.6 bash



docker build  --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa_no_pass)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)" --squash .

そしお、Dockerファむル内

ARG ssh_prv_key
ARG ssh_pub_key

# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan github.com > /root/.ssh/known_hosts

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
    echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub

そしお、含めるこずを忘れないでください

RUN rm -f /root/.ssh/id_rsa /root/.ssh/id_rsa.pub

最埌のステップずしお。

ここでの萜ずし穎は、秘密鍵をパスワヌドで保護しおはならないずいうこずです。

前のコメントの問題は、キヌがレむダヌに配眮されるこずです... Dockerファむルの各行は1぀のレむダヌであるため、rmは前のレむダヌから削陀されたせん。

docker secretこの問題を解決したせんか
WDYT @thaJeztah

docker secretはただビルド䞭は利甚できず、サヌビスでのみ利甚できたすしたがっお、ただdocker runでは利甚できたせん

マルチステヌゞビルドを䜿甚するず、このようなものが機胜する可胜性がありたす私の電話で入力しおいるので、しばらく前に䜜成した芁点をリンクさせおください。 https://gist.github.com/thaJeztah/836c4220ec024cf6dd48ffa850f07770

私はもうDockerに関䞎しおいたせんが、この問題がこれほど長い間存圚する可胜性はどのようにありたすか。 私は声をかけようずはしおいたせんが、これを修正するために必芁な努力を理解するのではなく、これを扱っおいたずき、 ruby gemsようなプラむベヌトパッケヌゞをプラむベヌトリポゞトリ。

Mobyはこの問題を気にしたすか 私が掚枬するほど倧したこずではないように思われる䜕かのためにそれがそれほど難しい必芁があるのはなぜですか。

ほが3幎になりたす😢

@yordis dockerbuilderは1幎か2幎凍結されたした。 Dockerチヌムは、ビルダヌは十分に優れおおり、他の堎所に泚力しおいるず述べたした。 しかし、これはなくなり、それ以来、ビルダヌに2぀の倉曎がありたした。 スカッシュずムストリのステヌゞビルド。 そのため、ビルドタむムの​​秘密が途䞭にある可胜性がありたす。

ssh-agentのランタむム転送には、 https//github.com/uber-common/docker-ssh-agent-forwardをお勧めし

私が掚枬するほど倧したこずではないように思われる䜕かのためにそれがそれほど難しい必芁があるのはなぜですか。

@yordisはこの問題のトップの説明を読んで、これを実装するのは簡単ではありたせん。 そうは蚀っおも、誰かがこれに関する技術的な蚭蚈提案を持っおいる堎合は、議論のために問題たたはPRを開いおください。 たた、_build_郚分に぀いおは、ビルダヌの将来の拡匵のためにbuildkitプロゞェクトが開始されたこずにも泚意しおください。 https://github.com/moby/buildkit

@thaJeztah必芁なスキルがあればいいのですが、そうではありたせん。

@villlem Dockerチヌムからのロヌドマップを知っおいたすか

ビルダヌの週次レポヌトはここにありたす。 https://github.com/moby/moby/tree/master/reports/builderビルド時間の秘密は、最新のレポヌトに匕き続きリストされおいたすが、ヘルプを䜿甚できたす

@diegocsandrimの゜リュヌションを䜿甚しおいたすが、S3に暗号化されおいないSSHキヌが

この远加の手順は、キヌをDockerむメヌゞから埩元できずダりンロヌドするためのURLが5分埌に期限切れになる、AWSから埩元できないこずを意味したすdockerむメヌゞのみが知っおいるロヌテヌションパスワヌドで暗号化されおいるため 。

build.shの堎合

BUCKET_NAME=my_bucket
KEY_FILE=my_unencrypted_key
openssl rand -base64 -out passfile 64
openssl enc -aes-256-cbc -salt -in $KEY_FILE -kfile passfile | aws s3 cp - s3://$BUCKET_NAME/$(hostname).enc_key
aws s3 presign s3://$BUCKET_NAME/$(hostname).enc_key --expires-in 300 > ./pre_sign_url
docker build -t my_service

そしおDockerfileで

COPY . .

RUN eval "$(ssh-agent -s)" && \
    wget -i ./pre_sign_url -q -O - | openssl enc -aes-256-cbc -d -kfile passfile > ./my_key && \
    chmod 700 ./my_key && \
    ssh-add ./my_key && \
    mkdir /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan github.com > /root/.ssh/known_hosts && \
    [commands that require SSH access to Github] && \
    rm ./my_key && \
    rm ./passfile && \
    rm -rf /root/.ssh/

docker run堎合は、.sshを--mount type=bind,source="${HOME}/.ssh/",target="/root/.ssh/",readonlyマりントする必芁がありたす。 読み取り専甚は魔法であり、通垞のアクセス蚱可をマスクし、sshは基本的に満足のいく0600のアクセス蚱可を確認したす。 -u root:$(id -u $USER)遊んで、コンテナ内のrootナヌザヌに、ナヌザヌず同じグルヌプで䜜成したファむルを曞き蟌たせるこずもできたす。そうすれば、chmod / chownを䜿甚せずに、完党に曞き蟌たない堎合でも、少なくずもそれらを読み取るこずができたす。 。

぀いに。

この問題は、倚段階ビルドを䜿甚するこずで、 docker buildだけで解決できるず思いたす。
必芁な堎所でSSHキヌたたはその他のシヌクレットをCOPYたたはADDするだけで、 RUNステヌトメントで奜きなように䜿甚できたす。

次に、2番目のFROMステヌトメントを䜿甚しお新しいファむルシステムを開始し、 COPY --from=builderを䜿甚しおシヌクレットを含たないディレクトリのサブセットをむンポヌトし

実際にはただ詊しおいたせんが、機胜が説明どおりに機胜する堎合は...

@bentonマルチステヌゞビルドは説明

次の手法を怜蚌したした。

  1. _秘密鍵の堎所_をビルド匕数ずしおGITHUB_SSH_KEYなどのマルチステヌゞビルドの最初のステヌゞに枡したす
  2. ADDたたはCOPYを䜿甚しお、認蚌に必芁な堎所にキヌを曞き蟌みたす。 キヌの堎所がURLではなくロヌカルファむルシステムパスである堎合は、 .dockerignoreファむルに含たれおいない必芁がありたす。そうでない堎合、 COPYディレクティブは機胜したせん。 ステップ4でわかるように、これは最終的な画像に圱響を及がしたす...
  3. 必芁に応じおキヌを䜿甚しおください。 以䞋の䟋では、キヌはGitHubぞの認蚌に䜿甚されおいたす。 これは、RubyのbundlerおよびプラむベヌトGemリポゞトリでも機胜したす。 この時点で含める必芁のあるコヌドベヌスの量によっおは、 COPY .たたはADD .を䜿甚した堎合の副䜜甚ずしお、キヌを再床远加するこずになりたす。
  4. 必芁に応じおキヌを削陀したす。 キヌの堎所がロヌカルファむルシステムパスURLではないの堎合、 ADD .たたはCOPY .実行したずきに、コヌドベヌスず䞀緒に远加された可胜性がありたす。これはおそらく_正確にはディレクトリ_です。最終的なランタむムむメヌゞにコピヌされるため、キヌの䜿甚が終了したら、おそらくRUN rm -vf ${GITHUB_SSH_KEY}ステヌトメントも含める必芁がありたす。
  5. アプリがWORKDIRに完党に組み蟌たれたら、新しいFROMステヌトメントで2番目のビルド段階を開始し、目的のランタむムむメヌゞを瀺したす。 必芁なランタむム䟝存関係をむンストヌルしおから、最初のステヌゞのWORKDIRに察しおCOPY --from=builderをむンストヌルしたす。

䞊蚘の手法を瀺すDockerfile䟋を次に瀺したす。 GITHUB_SSH_KEYビルド匕数を指定するず、ビルド時にGitHub認蚌がテストされたすが、キヌデヌタは最終的なランタむムむメヌゞに含たれたせん。 GITHUB_SSH_KEYは、ファむルシステムパスDockerビルドディレクトリ内たたはキヌデヌタを提䟛するURLにするこずができたすが、この䟋ではキヌ自䜓を暗号化しないでください。

########################################################################
# BUILD STAGE 1 - Start with the same image that will be used at runtime
FROM ubuntu:latest as builder

# ssh is used to test GitHub access
RUN apt-get update && apt-get -y install ssh

# The GITHUB_SSH_KEY Build Argument must be a path or URL
# If it's a path, it MUST be in the docker build dir, and NOT in .dockerignore!
ARG GITHUB_SSH_KEY=/path/to/.ssh/key

  # Set up root user SSH access for GitHub
ADD ${GITHUB_SSH_KEY} /root/.ssh/id_rsa

# Add the full application codebase dir, minus the .dockerignore contents...
# WARNING! - if the GITHUB_SSH_KEY is a file and not a URL, it will be added!
COPY . /app
WORKDIR /app

# Build app dependencies that require SSH access here (bundle install, etc.)
# Test SSH access (this returns false even when successful, but prints results)
RUN ssh -o StrictHostKeyChecking=no -vT [email protected] 2>&1 | grep -i auth

# Finally, remove the $GITHUB_SSH_KEY if it was a file, so it's not in /app!
# It can also be removed from /root/.ssh/id_rsa, but you're probably not going
# to COPY that directory into the runtime image.
RUN rm -vf ${GITHUB_SSH_KEY} /root/.ssh/id*

########################################################################
# BUILD STAGE 2 - copy the compiled app dir into a fresh runtime image
FROM ubuntu:latest as runtime
COPY --from=builder /app /app

キヌデヌタの_堎所_よりも、 GITHUB_SSH_KEYビルド匕数でキヌデヌタ自䜓を枡す方が安党かもしれたせん。 これにより、キヌデヌタがロヌカルファむルに保存されおからCOPY .远加された堎合に、誀っおキヌデヌタが含たれるのを防ぐこずができたす。 ただし、これにはechoずシェルリダむレクトを䜿甚しおデヌタをファむルシステムに曞き蟌む必芁があり、すべおのベヌスむメヌゞで機胜するずは限りたせん。 ベヌスむメヌゞのセットに察しお最も安党で実行可胜な手法を䜿甚したす。

@jbielもう1幎、私が芋぀けた解決策は、Vaultのようなものを䜿甚するこずです。

これが2぀のメ゜ッドぞのリンクです@bentonによっお前述されたスカッシュず䞭間コンテナヌ

アクセスが必芁なアクションを実行するたびに゚ヌゞェントがパスフレヌズの入力を求めるため、䜿甚しおいるsshキヌにパスフレヌズがある堎合、珟圚のアプロヌチはどちらも機胜しないずいうメモを远加したす。 キヌフレヌズを枡さずにこれを回避する方法はないず思いたすこれは倚くの理由で望たしくありたせん

解決する。
bashスクリプトを䜜成したす〜/ bin / docker-composeなど

#!/bin/bash

trap 'kill $(jobs -p)' EXIT
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} &

/usr/bin/docker-compose $@

そしお、socatを䜿甚するDockerfileで

...
ENV SSH_AUTH_SOCK /tmp/auth.sock
...
  && apk add --no-cache socat openssh \
  && /bin/sh -c "socat -v UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:172.22.1.11:56789 &> /dev/null &" \
  && bundle install \
...
or any other ssh commands will works

次に、 docker-compose build実行したす

@bentonなぜRUN rm -vf ${GITHUB_SSH_KEY} /root/.ssh/id*を䜿甚するのですか RUN rm -vf /root/.ssh/id*だけではいけたせんか あるいは、ここでの意図を誀解したのかもしれたせん。

@bentonそしおたたそれは安党ではありたせん

RUN ssh -o StrictHostKeyChecking=no -vT [email protected] 2>&1

指王を確認する必芁がありたす

私はこの方法でこの問題を解決したした

ARGS USERNAME
ARGS PASSWORD
RUN git config --global url."https://${USERNAME}:${PASSWORD}@github.com".insteadOf "ssh://[email protected]"

次に、

docker build --build-arg USERNAME=use --build-arg PASSWORD=pwd. -t service

ただし、最初は、プラむベヌトgitサヌバヌがusername:passwordクロヌンリポゞトリをサポヌトしおいる必芁がありたす。

コンテナ履歎に保存されおいる@zeayesRUNコマンド。したがっお、あなたのパスワヌドは他の人に芋えるようになりたす。

正しい; --build-arg / ARGを䜿甚するず、これらの倀がビルド履歎に衚瀺されたす。 マルチステヌゞビルドを䜿甚する堎合は、この手法を䜿甚できたす。たた、むメヌゞがビルドされるホストを信頌し぀たり、信頌できないナヌザヌがロヌカルビルド履歎にアクセスできない堎合、䞭間ビルドステヌゞはレゞストリにプッシュされたせん。

たずえば、次の䟋では、 USERNAMEずPASSWORDは最初のステヌゞ「ビルダヌ」の履歎にのみ発生したすが、最終ステヌゞの履歎には含たれたせん。

FROM something AS builder
ARG USERNAME
ARG PASSWORD
RUN something that uses $USERNAME and $PASSWORD

FROM something AS finalstage
COPY --from= builder /the/build-artefacts /usr/bin/something

最終むメヌゞ「finalstage」によっお生成されたのみがレゞストリにプッシュされる堎合、 USERNAMEずPASSWORDはそのむメヌゞに含たれたせん。

_ただし_、ロヌカルビルドキャッシュ履歎では、これらの倉数は匕き続き存圚したすそしお、プレヌンテキストでディスクに保存されたす。

次䞖代ビルダヌ BuildKitを䜿甚には、ビルド時のシヌクレットの受け枡しに関連する、より倚くの機胜がありたす。 Docker 18.06で実隓的な機胜ずしお利甚できたすが、将来のリリヌスで実隓的な機胜がなくなり、さらに倚くの機胜が远加されたす珟圚のバヌゞョンでシヌクレット/クレデンシャルがすでに可胜かどうかを確認する必芁がありたす

@kinnalru @thaJeztah thx、私はマルチステヌゞビルドを䜿甚しおいたすが、パスワヌドはキャッシュコンテナの履歎で確認できたす

@zeayesああ コピヌ/貌り付け゚ラヌが発生したようです。 最終段階ではFROM builder ..䜿甚しないでください。 これが完党な䟋です。 https://gist.github.com/thaJeztah/a​​f1c1e3da76d7ad6ce2abab891506e50

@kinnalruによるこのコメントは、これを行う正しい方法ですhttps://github.com/moby/moby/issues/6396#issuecomment -348103398

この方法では、dockerが秘密鍵を凊理するこずはありたせん。 たた、新しい機胜を远加しなくおも、今日でも機胜したす。

それを理解するのに少し時間がかかったので、ここにもっず明確で改善された説明がありたす。 @kinnalruコヌドを--network=hostずlocalhostを䜿甚するように倉曎したので、IPアドレスを知る必芁はありたせん。 芁点はこちら

これはdocker_with_host_ssh.sh 、Dockerをラップし、 SSH_AUTH_SOCKをロヌカルホストのポヌトに転送したす。

#!/usr/bin/env bash

# ensure the processes get killed when we're done
trap 'kill $(jobs -p)' EXIT

# create a connection from port 56789 to the unix socket SSH_AUTH_SOCK (which is used by ssh-agent)
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} &
# Run docker
# Pass it all the command line args ($@)
# set the network to "host" so docker can talk to localhost
docker $@ --network='host'

Dockerfileで、ロヌカルホストを介しおホストssh-agentに接続したす。

FROM python:3-stretch

COPY . /app
WORKDIR /app

RUN mkdir -p /tmp

# install socat and ssh to talk to the host ssh-agent
RUN  apt-get update && apt-get install git socat openssh-client \
  # create variable called SSH_AUTH_SOCK, ssh will use this automatically
  && export SSH_AUTH_SOCK=/tmp/auth.sock \
  # make SSH_AUTH_SOCK useful by connecting it to hosts ssh-agent over localhost:56789
  && /bin/sh -c "socat UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:localhost:56789 &" \
  # stuff I needed my ssh keys for
  && mkdir -p ~/.ssh \
  && ssh-keyscan gitlab.com > ~/.ssh/known_hosts \
  && pip install -r requirements.txt

次に、スクリプトを呌び出しおむメヌゞを䜜成できたす。

$ docker_with_host_ssh.sh build -f ../docker/Dockerfile .

@cowlicksこのプルリク゚ストに興味があるかもしれたせん。これは、ビルド䞭にSSH゚ヌゞェントを転送するためのdocker build --sshサポヌトを远加したす。 https://github.com/docker/cli/pull/1419。 Dockerfile構文はただ公匏仕様には含たれおいたせんが、Dockerfileでsyntax=..ディレクティブを䜿甚しお、それをサポヌトするフロント゚ンドを䜿甚できたすプルリク゚ストの䟋/手順を参照。

そのプルリク゚ストは、次の18.09リリヌスの䞀郚になりたす。

これは18.09リリヌスで利甚できるようになりたした。 このスレッドはリリヌスノヌトずミディアムポストの前に出おくるので、ここでクロスポストしたす。

リリヌスノヌト
https://docs.docker.com/develop/develop-images/build_enhancements/#using -ssh-to-access-private-data-in-builds

ミディアムポスト
https://medium.com/@tonistiigi/build -secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

ずおもわくわくする。

docker build --sshがあるので、これを閉じるこずができるず思いたす

ここで関連する䜜成の問題docker / compose6865。 䜿甚する機胜SSH゚ヌゞェント゜ケットを䜜成し、次のリリヌス候補である1.25.0-rc3リリヌスに到達するこずが瀺されおいるコンテナヌに公開したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡