スクリプトからdockerコンテナーにrootパスワードを設定するにはどうすればよいですか?


11

ホストで実行され、Dockerコンテナーを作成/開始/停止するスクリプトがあります。コンテナ内のrootユーザーのパスワードを変更するスクリプトが欲しいのですが。

コンテナーはsshサーバーなので、私は試してみました: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

しかし、それは機能しません。先に進み、デバッグに時間をかける前に、よりスマートな方法があるかどうかを知りたいと思います。

適切な「ドッカーの方法」は、Dockerfileによって実行されるスクリプトを作成することであることを理解しています。このスクリプトは、共有ボリュームからパスワードをプルし、それをルートパスワードとして設定します。これは複雑に聞こえますが、私はそれを行う方法を知っており、私が使用する別のDockerイメージでうまく機能します。しかし、私はこれのためにそれをしたくありません。

Dockerまたはsshを使用して非対話的にユーザーのパスワードを変更するコマンドが必要です。

回答:


8
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)

パスワードを要求するポップアップを開き、それを返します。スクリプトにパスワードは保存されていません

セキュリティをあまり気にせずにパスワードを設定する必要があるDockerコンテナがある場合は、Dockerfileにステートメントを追加できます。

RUN echo "root:root" | chpasswd

私のDockerfileの2つであなたと同じようにメソッドを設定する方法は同じです(異なるプロジェクトですが、本質的な部分は同じです)。しかし、1つは動作しています(SSHで接続できます)、もう1つは私を許可していません。なぜか?
ismailsunni

3
:それはchpasswdのために標準入力について説明している場合+1回答はより透明になるecho username:newpassword | chpasswd
ジョナサンKomar

5

これはDockerとは関係ありません。passwdからパスワードを提供することを明示する必要がありますstdin

echo 'newpassword' |passwd root --stdin

入力いただきありがとうございます。--stdinはubuntuではサポートされていません。動作しません。
クリス

14
--stdin新しいLinuxシステムでは廃止されました。使用するchpasswd代わりに、:echo username:newpassword | chpasswd
unblevable

1

これはUbuntu 14.04.4 LTSで問題なく動作します。

コンテナーを再構築するスクリプト(「ホスト」で実行されている必要があります)に、次の行を追加します。

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd

スクリプトに実際のパスワードを入力することは、パスワードを処理するための非常に安全な方法ではありません。適切にハッシュされたパスワードをスクリプトに入れて使用する方がはるかに安全usermodですpasswd
kasperd

良い点、ありがとう。この場合、これは非常に少数の処理を行う単なるDockerコンテナーであるため、リスクはありません。誰かがスクリプトを読むことができる場合、彼らはすでにサーバーの残りを所有しています。次回も覚えておきます:)。
クリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.