- Using the passwd command from within a shell script
- 15 Answers 15
- Как обновить / изменить пароль пользователя в Linux разными способами
- Способ 1: использование команды passwd
- Метод 2: Использование команды chpasswd
- Метод 3: Как установить разный пароль для нескольких пользователей
- Способ 4: как установить один и тот же пароль для нескольких пользователей
- Метод 5: Как изменить пароль пользователя на нескольких серверах
- Способ 6: Как изменить пароль пользователя на нескольких серверах с помощью команды pssh
- Способ 7: Как изменить пароль пользователя на нескольких серверах с помощью команды chpasswd
Using the passwd command from within a shell script
I’m writing a shell script to automatically add a new user and update their password. I don’t know how to get passwd to read from the shell script instead of interactively prompting me for the new password. My code is below.
15 Answers 15
--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
adduser "$1" echo "$2" | passwd "$1" --stdin
[Update] a few issues were brought up in the comments:
Your passwd command may not have a —stdin option: use the chpasswd utility instead, as suggested by ashawley.
If you use a shell other than bash, «echo» might not be a builtin command, and the shell will call /bin/echo . This is insecure because the password will show up in the process table and can be seen with tools like ps .
In this case, you should use another scripting language. Here is an example in Perl:
#!/usr/bin/perl -w open my $pipe, '|chpasswd' or die "can't open pipe: $!"; print "$username:$password"; close $pipe
You should quote your parameter expansions. Moreover; this is in no way shape or form portable or even recommended in the slightest. See my reply for some more information on the topic.
Please don’t use echo . | password! The password will then be visible to any other users who run ps. And the more places you pass the password through (different programs, files, pipes, etc), the higher the chances are that it will leak out somewhere.
@lhunath: you are right about the quoting, I’ll fix that. @Brian: «echo» is a bash builtin, it will not show up in ‘ps’ output (at least in bash, not sure about sh)
@glennjackman please note that here strings implicitly create temporary files that may be readable by outside sources.
The only solution works on Ubuntu 12.04:
echo -e "new_password\nnew_password" | (passwd user)
But the second option only works when I change from:
echo "password:name" | chpasswd
echo "user:password" | chpasswd
See explanations in original post: Changing password via a script
What if the password contains a «\n» in the first case? There is a way to handle this? Such as my@secret\npasword123
Similar to the first but automatically repeats the password. Also, use sudo otherwise it will ask for current password first and mess this up. echo password | sed ‘s/.*/\0\n\0/’ | sudo passwd -q $USER 2> /dev/null
Nowadays, you can use this command:
For some reason I received the following error when trying your command: «Authentication token manipulation error». Adding sudo before chpasswd fixed this for me.
@LaurentVanWinckel — chpasswd only works with sudo / root rights. Therefore, to execute it as an user other than root , that user has to be in the sudo group: echo ‘user:pass’ | sudo chpasswd . When executing this one-liner on a prompt, make sure to prepend it with an additional space. Otherwise the command including the sensitive password will likely be written to the user’s prompt history file, e.g. ~/.bash_history .
Nothing you can do in bash can possibly work. passwd(1) does not read from standard input. This is intentional. It is for your protection. Passwords were never intended to be put into programs, or generated by programs. They were intended to be entered only by the fingers of an actual human being, with a functional brain, and never, ever written down anywhere.
Nonetheless, we get hordes of users asking how they can circumvent 35 years of Unix security.
It goes on to explain how you can set your shadow(5) password properly, and shows you the GNU-I-only-care-about-security-if-it-doesn’t-make-me-think-too-much-way of abusing passwd(1) .
Lastly, if you ARE going to use the silly GNU passwd(1) extension —stdin , do not pass the password putting it on the command line.
echo $mypassword | passwd --stdin # Eternal Sin. echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE. passwd --stdin
The last is the best you can do with GNU passwd . Though I still wouldn't recommend it.
Putting the password on the command line means anyone with even the remotest hint of access to the box can be monitoring ps or such and steal the password. Even if you think your box is safe; it's something you should really get in the habit of avoiding at all cost (yes, even the cost of doing a bit more trouble getting the job done).
Как обновить / изменить пароль пользователя в Linux разными способами
Это самая базовая вещь, а именно, как установить пароль пользователя, когда вы создаете учетную запись пользователя в Linux.
Все используют команду passwd, за которой следует имя пользователя passwd USERNAME, чтобы установить пароль для пользователя.
Убедитесь, что вам нужно установить жесткий пароль и угадать пароль, который поможет вам сделать систему более безопасной.
Я имею в виду, это должно быть сочетание букв, символов и цифр.
Кроме того, я советую вам менять пароль хотя бы раз в месяц по соображениям безопасности.
Когда вы используете команду passwd, она попросит вас дважды ввести пароль, чтобы установить его.
Это собственный метод установки пароля пользователя.
А что если вы не хотите обновлять пароль дважды и хотели бы сделать это по-другому?
Если вы работаете в качестве администратора Linux, вы, возможно, задавали приведенные ниже вопросы много раз.
Некоторые из вас могут или не могут получить ответ на эти вопросы.
Что бы это ни было, не волнуйтесь, мы здесь, чтобы ответить на все ваши вопросы.
1) Как обновить / изменить пароль пользователя в одной команде?
2) Как обновить / изменить один и тот же пароль для нескольких пользователей в Linux?
3) Как обновить / изменить пароль нескольких пользователей в Linux?
4) Как обновить / изменить пароль для нескольких пользователей в Linux?
5) Как обновить / изменить разный пароль для нескольких пользователей в Linux?
6) Как обновить / изменить пароль пользователя на нескольких серверах Linux?
7) Как обновить / изменить пароль нескольких пользователей на нескольких серверах Linux?
Способ 1: использование команды passwd
Команда passwd – это стандартный метод установки, обновления или изменения пароля для пользователей в Linux.
Ниже приведен стандартный способ сделать это.
# passwd renu Changing password for user renu. New password: BAD PASSWORD: The password contains the user name in some form Retype new password: passwd: all authentication tokens updated successfully.
Запустите следующую команду, если вы хотите установить или изменить пароль с помощью одной команды.
Это позволяет пользователям обновить пароль в одной команде.
# echo "new_password" | passwd --stdin thanu Changing password for user thanu. passwd: all authentication tokens updated successfully.
Метод 2: Использование команды chpasswd
chpasswd – это еще одна команда, которая позволит нам устанавливать, обновлять или изменять пароль для пользователей в Linux.
Используйте следующий формат, если вы хотите использовать команду chpasswd, чтобы изменить пароль для пользователя в одной команде.
# echo "thanu:new_password" | chpasswd
Метод 3: Как установить разный пароль для нескольких пользователей
Используйте приведенный ниже скрипт, если вы хотите установить, обновить или изменить пароль для нескольких пользователей Linux с разными паролями.
Для этого сначала нам нужно получить список пользователей с помощью следующей команды.
Следующая команда выведет список пользователей, имеющих каталог /home, и перенаправит вывод в файл user-list.txt.
# cat /etc/passwd | grep "/home" | cut -d":" -f1 > user-list.txt
Перечислите пользователей с помощью команды cat.
Удалите пользователя из списка, если вы не хотите сбрасывать пароль для конкретного пользователя.
# cat user-list.txt centos magi daygeek thanu renu
Создайте следующий небольшой скрипт для достижения этой цели.
# vi password-update.sh #!/bin/sh for user in `more user-list.txt` do echo "$user@123" | passwd --stdin "$user" chage -d 0 $user done
Установите исполняемое разрешение для файла password-update.sh.
Наконец, запустите скрипт, чтобы добиться этого.
# ./password-up.sh magi Changing password for user magi. passwd: all authentication tokens updated successfully. daygeek Changing password for user daygeek. passwd: all authentication tokens updated successfully. thanu Changing password for user thanu. passwd: all authentication tokens updated successfully. renu Changing password for user renu. passwd: all authentication tokens updated successfully.
Способ 4: как установить один и тот же пароль для нескольких пользователей
Используйте приведенный ниже скрипт, если вы хотите установить или обновить или изменить один и тот же пароль для нескольких пользователей в Linux.
# vi password-update.sh #!/bin/sh for user in `more user-list.txt` do echo "new_password" | passwd --stdin "$user" chage -d 0 $user done
Метод 5: Как изменить пароль пользователя на нескольких серверах
Используйте следующий скрипт, если вы хотите изменить пароль пользователя на нескольких серверах.
В моем случае мы собираемся изменить пароль для пользователя Renu.
Убедитесь, что вы назначаете правильное имя пользователя, которому хотите обновить пароль.
Убедитесь, что вам нужно обновить список серверов в файл server-list.txt.
Каждый сервер должен быть в отдельной строке.
# vi password-update.sh #!/bin/bash for server in `cat server-list.txt` do ssh root@$server 'passwd --stdin renuВы будете получать вывод, аналогичную этому.
# ./password-update.sh New password: BAD PASSWORD: it is based on a dictionary word BAD PASSWORD: is too simple Retype new password: Changing password for user renu. passwd: all authentication tokens updated successfully. New password: BAD PASSWORD: it is based on a dictionary word BAD PASSWORD: is too simple Retype new password: Changing password for user renu. passwd: all authentication tokens updated successfully.Способ 6: Как изменить пароль пользователя на нескольких серверах с помощью команды pssh
pssh – это программа для параллельного выполнения ssh на нескольких хостах.
Она предоставляет такие функции, как отправка ввода всем процессам, передача пароля в ssh, сохранение вывода в файлы и тайм-аут.
# pssh -i -h /tmp/server-list.txt "printf '%s\n' new_pass new_pass | passwd --stdin root"Вы будете получать вывод, аналогичную этому.
[1] 07:58:07 [SUCCESS] CentOS.2daygeek.com Changing password for user root. passwd: all authentication tokens updated successfully. Stderr: New password: BAD PASSWORD: it is based on a dictionary word BAD PASSWORD: is too simple Retype new password: [2] 07:58:07 [SUCCESS] ArchLinux.2daygeek.com Changing password for user root. passwd: all authentication tokens updated successfully. Stderr: New password: BAD PASSWORD: it is based on a dictionary word BAD PASSWORD: is too simpleСпособ 7: Как изменить пароль пользователя на нескольких серверах с помощью команды chpasswd
В качестве альтернативы мы можем использовать команду chpasswd для обновления пароля пользователя на нескольких серверах.
# ./password-update.sh #!/bin/bash for server in `cat server-list.txt` do ssh root@$server 'echo "magi:new_password" | chpasswd' done