我开发了一个工具,使用JSch(用于通过ssh与其他机器通信的java库)一次性将单行命令发送到不同的Linux机器
因此我们的客户需要更改所有计算机上的密码。谷歌帮助我达到了这一点:
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
passwd帮助:
[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.
非常感谢您的帮助。
答案 0 :(得分:1)
/bin/passwd
可能会打开/dev/tty
以强制从终端而不是管道进行读取。
您可能最好使用crypt()
加密(实际上是哈希)新密码,然后替换/etc/shadow
中的密码哈希(对于拥有密码的系统)或/etc/passwd
(对于那些没有的系统)。这样做的缺点是有些依赖操作系统,但它不会进入奇怪的游戏。
您也可以在ssh中强制分配tty - ssh既可以使用也可以不使用。然后你会在以明文两次发送密码之前添加一些延迟 - 这种方法不依赖于操作系统,但有时候tty游戏可能不那么有趣。
答案 1 :(得分:1)
您可以使用chpasswd(以root用户身份但不安全):
# echo "user:passwd" | chpasswd
答案 2 :(得分:0)
您可以使用single命令更改用户密码。
echo -e "password\npassword" | sudo -S passwd testuser