在無頭模式下變更密碼

在無頭模式下變更密碼

我正在建立一個腳本來完全自動化 VPS 設置,我需要更改 root 密碼。我想避免輸入它,因為腳本是透過 SSH 運行的。

有沒有辦法將任意值重定向到passwd指令的輸入?

編輯

我知道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指令嗎?典型的 Linuxuseradd有一個“-p”或“--password”選項,可讓您設定加密的密碼為某個值。您可以從文件中取得加密的密碼/etc/shadow

另一種選擇是對文件進行胡鬧/etc/shadow。使用sed它或更改加鹽的加密 root 密碼應該不會太難。

答案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

你可以將 tmux 包裹在 passwd 周圍:

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

當然以 root 身分運行。

相關內容