6

作为尝试在我的 root ssh 会话中实施安全措施的一部分,我正在尝试设计一种在 root 用户登录 n 秒后启动脚本的方法,并更改用户密码并自动注销用户。

我一直在尝试默默地更改密码。我有以下代码:

echo -e "new\nnew" | passwd -q

这不是像手册页中提到的那样“悄悄地”更改密码,而是输出以下内容:

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

这没有多大帮助。

我试图管道标准输出和标准错误,但我认为我误解了管道。

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q > /dev/null
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

~/php-pastebin-v3 #echo -e "new\nnew" | passwd -q /dev/null 2>&1
passwd: user '/dev/null' does not exist

通过脚本悄悄地更改密码的正确方法是什么?

4

3 回答 3

5

如果要同时重定向 stdout 和 sterr:

echo "..." | passwd &> /dev/null

这相当于

echo "..." | passwd > /dev/null 2>&1

这意味着“将标准输出重定向到 /dev/null,然后将(复制)标准错误重定向到标准输出”。通过这种方式,您将 stdout 和 stderr 都重定向到 null ...但这可能还不够(我相信在这种情况下会如此)。但理论上程序可能会直接写入终端。例如这个脚本

$ cat test.sh
echo stdout
echo stderr 1 1>&2
echo stderr 2 >/dev/stderr
echo stderr 3 >/dev/fd/2
echo bad luck > /dev/tty

$ ./test.sh &> /dev/null
bad luck

要摆脱此输出,您必须强制程序在伪终端中运行,例如http://empty.sourceforge.net/。但这只是一个旁注 &> /dev/null 可以正常工作。

于 2013-05-10T19:53:19.937 回答
3

你也可以这样做:

mkpasswd
# Password:blah
# BVR2Pnr3ro5B2

echo "user:BVR2Pnr3ro5B2" | chpasswd -e

所以密码已经在脚本中加密了。

于 2014-07-15T19:43:07.203 回答
0

这对我有用

echo "passssssword" | passwd root --stdin > /dev/null

注意: --stdin仅适用于root用户

于 2013-02-22T11:46:47.600 回答