passwd в одной команде не работает

Я разработал инструмент для отправки однострочных команд на разные машины linux за один раз с использованием JSch (библиотека Java, используемая для связи с другими машинами через ssh)

Поэтому нашему клиенту необходимо сменить пароль на ВСЕХ машинах. Google помог мне достичь этой точки:

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 help:

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

Заранее большое спасибо за помощь.

3 ответа

Решение

/bin/passwd может быть открытие /dev/tty заставить чтение из терминала вместо трубы.

Возможно, вам лучше зашифровать (на самом деле, хэширование) новый пароль, используя crypt(), а затем заменить хэш пароля в /etc/shadow (для систем, у которых это есть) или /etc/passwd (для систем, которые этого не делают). Недостаток этого метода в том, что он в некоторой степени зависит от операционной системы, но не попадает в странные tty игры.

Вы также можете принудительно распределить tty в ssh - ssh может работать как с таковым, так и без него. Затем вы должны добавить пару задержек, прежде чем отправлять пароль в виде обычного текста дважды - этот метод менее зависим от ОС, но иногда tty-игры могут быть менее увлекательными.

Вы можете использовать chpasswd (как root, но это не безопасно):

# echo "user:passwd" | chpasswd

Вы можете использовать одну команду, чтобы изменить пароль пользователя.

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

Другие вопросы по тегам