passwd在一个命令不起作用

我开发了一种工具,可以使用JSch(一个用于通过ssh与其他机器通信的java库)一次性发送单行命令到不同的linux机器,

所以我们的客户需要更改所有机器上的密码。 Google帮助我达到了这一点:

echo -e "123\n123" | passwd username echo -e "123\n123" | passwd username “123”是新密码。

该命令执行,但总是输出:

 [root@QNA-XR1 ~]# echo -e "123\n123" | passwd Changing password for root New password: Retype password: passwd: password for root is unchanged 

这表明命令没有成功。

请注意,这是一个运行linux的小型设备。 这是一个私人编译的版本,尽可能的紧凑。 其实我并不了解linux!

这是机器信息:

 [root@QNA-XR1 ~]# uname -a Linux QNA-XR1 2.6.22-XR100-v1.1.7 #1 Tue Aug 19 22:55:50 EDT 2008 ppc unknown 

密码帮助:

 [root@QNA-XR1 ~]# passwd --help BusyBox v1.7.3 (2008-01-09 00:06:30 EST) multi-call binary Usage: passwd [OPTION] [name] Change a user password. If no name is specified, changes the password for the current user. Options: -a Define which algorithm shall be used for the password (choices: des, md5) -d Delete the password for the specified user account -l Locks (disables) the specified user account -u Unlocks (re-enables) the specified user account 

回声帮助

 [root@QNA-XR1 ~]# help echo echo: echo [-neE] [arg ...] Output the ARGs. If -n is specified, the trailing newline is suppressed. If the -e option is given, interpretation of the following backslash-escaped characters is turned on: \a alert (bell) \b backspace \c suppress trailing newline \E escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \num the character whose ASCII code is NUM (octal). You can explicitly turn off the interpretation of the above characters with the -E option. 

提前感谢您的帮助。

/bin/passwd可能会打开/dev/tty强制读取终端而不是管道。

crypt()加密(散列,真的)你的新密码,然后在/etc/shadow (对于有系统的系统)或/etc/passwd (对于不是的系统) 。 这有点依赖操作系统的缺点,但它并没有进入怪异的游戏。

你也可以强制在ssh中分配一个tty – ssh可以同时使用或不使用它。 那么在发送密码两次之前,你需要添加一些延迟 – 这个方法不是依赖于操作系统的,但是有时候tty游戏可能不那么有趣。

你可以使用chpasswd(作为root用户,但不安全):

 # echo "user:passwd" | chpasswd