Как автоматически добавить учетную запись пользователя и пароль с помощью скрипта Bash?
мне нужно иметь возможность создавать учетные записи пользователей на моем Linux(Fedora 10) и автоматически назначать пароль через скрипт bash (или иначе, если это необходимо).
легко создать пользователя с помощью Bash например:
[whoever@server ]# /usr/sbin/useradd newuser
можно ли назначить пароль в Bash, что-то функционально похожее на это, но автоматически:
[whoever@server ]# passwd newuser
Changing password for user testpass.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[whoever@server ]#
19 ответов:
вы можете запустить команду passwd и отправить ее по конвейеру ввода. Итак, сделайте что-то вроде:
echo thePassword | passwd theUsername --stdin
вы также можете использовать chpasswd:
echo username:new_password | chpasswdИтак, вы меняете пароль для to
new_password.
Я спрашивал себя то же самое, и не хотел полагаться на скрипт Python. Это строка для добавления пользователя с определенным паролем в одну строку bash:
/usr/sbin/useradd -p \`openssl passwd -1 $PASS\` $USER
ниже код работал в Ubuntu 14.04. Попробуйте, прежде чем использовать его в других версиях/вариантах linux.
# quietly add a user without password adduser --quiet --disabled-password --shell /bin/bash --home /home/newuser --gecos "User" newuser # set password echo "newuser:newpassword" | chpasswd
мне понравился подход Тралемонки
echo thePassword | passwd theUsername --stdinхотя это не совсем Работа для меня, как написано. Однако это сработало для меня.echo -e "$password\n$password\n" | sudo passwd $user
-e- это признать\nкак новую строку.
sudo- это права доступа root для Ubuntu.двойные кавычки признать
$и разверните переменные.приведенная выше команда передает пароль и новую строку, два раза, в
passwd, чтоpasswdтребует.если не используя переменные, я думаю, что это, вероятно, работает.
echo -e 'password\npassword\n' | sudo passwd usernameодинарных кавычек здесь должно быть достаточно.
следующие работы для меня и протестированы на Ubuntu 14.04. Это один лайнер, который не требует никакого пользовательского ввода.
sudo useradd -p $(openssl passwd -1 $PASS) $USERNAMEвзято из @Tralemonkey
вы можете использовать опцию-P.
useradd -p encrypted_password newuserк сожалению, это требует, чтобы хэш-пароль (где пароль это для вас). К сожалению, не существует стандартной утилиты для хэширования некоторых данных, поэтому вам придется написать это самостоятельно.
вот небольшой скрипт Python, который я взбил, чтобы сделать шифрование для вас. Предполагая, что вы назвали его pcrypt, вы бы затем написать выше командной строки:
useradd -p $(pcrypt ${passwd}) newuserпару предупреждения, чтобы быть в курсе.
- во время работы pcrypt открытый текст будет виден любому пользователю с помощью команды ps.
- pcrypt использует функцию крипты старого стиля - Если вы используете что-то более современное, например хэш MD5, вам нужно будет изменить pcrypt.
и вот pcrypt:
#!/usr/bin/env python import crypt import sys import random saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" def salt(): return random.choice(saltchars) + random.choice(saltchars) def hash(plain): return crypt.crypt(arg, salt()) if __name__ == "__main__": random.seed() for arg in sys.argv[1:]: sys.stdout.write("%s\n" % (hash(arg),))
--stdinне работает в Debian. Он говорит:`passwd: unrecognized option '--stdin'`Это сработало для меня:
#useradd $USER #echo "$USER:$SENHA" | chpasswdздесь мы можем найти некоторые другие хорошие стороны:
вы можете использовать expect в своем скрипте bash.
от http://www.seanodonnell.com/code/?id=21
#!/usr/bin/expect ######################################### #$ file: htpasswd.sh #$ desc: Automated htpasswd shell script ######################################### #$ #$ usage example: #$ #$ ./htpasswd.sh passwdpath username userpass #$ ###################################### set htpasswdpath [lindex $argv 0] set username [lindex $argv 1] set userpass [lindex $argv 2] # spawn the htpasswd command process spawn htpasswd $htpasswdpath $username # Automate the 'New password' Procedure expect "New password:" send "$userpass\r" expect "Re-type new password:" send "$userpass\r"
Я знаю, что приду к этому спустя годы, но я не могу поверить, что никто не предложил usermod.
usermod --password `perl -e "print crypt('password','sa');"` rootчерт, на всякий случай кто-то хочет сделать это на более старом HPUX вы можете использовать
usermod.sam./usr/sam/lbin/usermod.sam -F -p `perl -e "print crypt('password','sa');"` username- F требуется только в том случае, если человек, выполняющий сценарий, является текущим пользователем. Конечно, вам не нужно использовать Perl для создания хэша. Вы можете использовать openssl или многие другие команды вместо него.
один лайнер для создания пользователя sudo с домашним каталогом и паролем.
useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}
вот скрипт, который сделает это за вас .....
вы можете добавить список пользователей (или только один пользователь), если хотите, все за один раз, и каждый будет иметь другой пароль. В качестве бонуса вы представлены в конце скрипта со списком каждого пароля пользователя. .... Если вы хотите, вы можете добавить некоторые параметры обслуживания пользователей
как:
chage -m 18 $user chage -M 28 $userк скрипту, который установит возраст пароля и так далее на.
=======
#!/bin/bash # Checks if you have the right privileges if [ "$USER" = "root" ] then # CHANGE THIS PARAMETERS FOR A PARTICULAR USE PERS_HOME="/home/" PERS_SH="/bin/bash" # Checks if there is an argument [ $# -eq 0 ] && { echo >&2 ERROR: You may enter as an argument a text file containing users, one per line. ; exit 1; } # checks if there a regular file [ -f "" ] || { echo >&2 ERROR: The input file does not exists. ; exit 1; } TMPIN=$(mktemp) # Remove blank lines and delete duplicates sed '/^$/d' ""| sort -g | uniq > "$TMPIN" NOW=$(date +"%Y-%m-%d-%X") LOGFILE="AMU-log-$NOW.log" for user in $(more "$TMPIN"); do # Checks if the user already exists. cut -d: -f1 /etc/passwd | grep "$user" > /dev/null OUT=$? if [ $OUT -eq 0 ];then echo >&2 "ERROR: User account: \"$user\" already exists." echo >&2 "ERROR: User account: \"$user\" already exists." >> "$LOGFILE" else # Create a new user /usr/sbin/useradd -d "$PERS_HOME""$user" -s "$PERS_SH" -m "$user" # passwdgen must be installed pass=$(passwdgen -paq --length 8) echo $pass | passwd --stdin $user # save user and password in a file echo -e $user"\t"$pass >> "$LOGFILE" echo "The user \"$user\" has been created and has the password: $pass" fi done rm -f "$TMPIN" exit 0 else echo >&2 "ERROR: You must be a root user to execute this script." exit 1 fi===========
надеюсь, что это помогает.
Ура, Карел
Я тестировал в своем собственном сценарии оболочки.
$new_usernameозначает вновь созданный пользователь$new_passwordзначит новый парольДля CentOS
echo "$new_password" | passwd --stdin "$new_username"Для Debian / Ubuntu
echo "$new_username:$new_password" | chpasswdДля OpenSUSE
echo -e "$new_password\n$new_password" | passwd "$new_username"
решение, которое работает на Debian и красной шляпе. Зависит от perl, использует хэши sha-512:
cat userpassadd #!/usr/bin/env bash salt=$(cat /dev/urandom | tr -dc A-Za-z0-9/_- | head -c16) useradd -p $(perl -e "print crypt('', '$6$' . '$salt' . '$')")использование:
userpassadd jim jimslongpasswordон может эффективно использоваться в качестве однострочного, но вам придется указать пароль, соль и имя пользователя в нужных местах самостоятельно:
useradd -p $(perl -e "print crypt('pass', '$6$salt$')") username
от IBM (https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds1/chpasswd.htm):
создать текстовый файл, скажем текст.txt и заполнить его с помощью пары user: password следующим образом:
user1:password1 user2:password2 ... usern:passwordnсохранить текст.txt файл, и запустить
cat text.txt | chpasswordвот именно. Решение является (а) масштабируемым и (б) не включает печать паролей в командной строке.
решение Tralemonkey почти сработало и для меня ... но не совсем. Я делал это так:
echo -n '$#@password@#$' | passwd myusername --stdin2 ключевые детали его решение не включили,
-nудерживает echo от добавления\nк паролю, который шифруется, и одинарные кавычки защищают содержимое от интерпретации оболочкой (bash) в моем случае.кстати, я запустил эту команду как root в системе CentOS 5.6, если кому-то интересно.
для RedHat / CentOS вот код, который создает пользователя, добавляет пароли и делает пользователя sudoer:
#!/bin/sh echo -n "Enter username: " read uname echo -n "Enter password: " read -s passwd adduser "$uname" echo $uname:$passwd | sudo chpasswd gpasswd wheel -a $uname
использование:
./my_add_user.sh USER PASSWDкод:
#!/bin/bash # my_add_user.sh if [ "$#" -lt 2 ] then echo " username passwd" exit fi user= passwd= useradd $user -d /data/home/$user -m ; echo $passwd | passwd $user --stdin;
Comments