ヘッドレスモードでパスワードを変更する

ヘッドレスモードでパスワードを変更する

VPS セットアップを完全に自動化するスクリプトを作成しており、ルート パスワードを変更する必要があります。スクリプトは SSH 経由で実行されるため、パスワードを入力しないようにしたいと思います。

任意の値をコマンドの入力にリダイレクトする方法はありますかpasswd?

編集

パスワードを 2 回含めることはわかっていますpasswd < passwd_file.txt...この目的で一時ファイルを使用するのは少し不格好に思えるので、よりエレガントな方法があるかどうかを知りたいです。

答え1

使用している UNIX のバージョンはわかりませんが、Linux の passwd(1) のマニュアル ページには次のように表示されます。

   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.

したがって、実行する必要があるのは以下だけです:

echo 'somepassword' | passwd --stdin

編集して追加: より移植性の高いのは、chpasswd(少なくとも) Red Hat と Ubuntu の両方に存在するものです。

echo 'someuser:somepassword' | chpasswd

マニュアルページを参照してください。

答え2

やりたいことを実現するのは大変だと思います。このpasswdコマンドは、まさにあなたが説明した状況を回避するために、あらゆるパスワード推測スキームを阻止し、多くの潜在的なセキュリティ問題を回避しようと全力を尽くしています。

コマンドは使えますかuseradd?典型的なLinuxにはuseradd「-p」または「--password」オプションがあり、暗号化されたパスワードを何らかの値に変更します。暗号化されたパスワードはファイルから取得できます/etc/shadow

もう一つの選択肢は、ファイルを操作することである。ソルトが付加され暗号化されたルート パスワードを変更するのは/etc/shadowそれほど難しくないはずだ。sed

答え3

はい!道を見つけました。printf助かりました。

HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORD\n$ROOT_PASSWORD\n" | passwd
EOF

私にとっては、これが最善の方法です。パスワードがローカルまたはリモート ホストに平文で渡されることがないため (ssh 接続のみ)、クリーンかつ完全に安全です。

答え4

passwd を tmux でラップすることもできます:

tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'

もちろん、root として実行します。

関連情報