
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 として実行します。