0

我开发了一个工具,可以使用 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

密码帮助:

[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.

非常感谢您的帮助。

4

3 回答 3

3

您可以使用 chpasswd (作为 root 但它不安全):

# echo "user:passwd" | chpasswd
于 2012-07-09T20:14:41.490 回答
2

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

您最好使用 加密(实际上是散列)您的新密码crypt(),然后在/etc/shadow(对于有它的系统)或/etc/passwd(对于没有它的系统)替换密码散列。这有点依赖于操作系统的缺点,但它不会进入奇怪的 tty 游戏。

您也可以在 ssh 中强制分配一个 tty - ssh 可以在有或没有一个的情况下运行。然后你会在两次以明文形式发送密码之前添加一些延迟 - 这种方法对操作系统的依赖程度较低,但有时 tty 游戏可能不那么有趣。

于 2012-07-09T20:11:01.117 回答
1

您可以使用单个命令来更改用户密码。

echo -e "password\npassword" | sudo -S passwd testuser

于 2018-03-16T10:53:11.597 回答