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