
我正在建立一個腳本來完全自動化 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 身分運行。