
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として実行してください。