我正在构建一个脚本来完全自动化 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 身份运行。