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

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

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

関連情報