Как автоматически добавить учетную запись пользователя и пароль с помощью скрипта Bash? - PullRequest
174 голосов
/ 28 января 2010

Мне нужно иметь возможность создавать учетные записи пользователей в моем Linux (Fedora 10) и автоматически назначать пароль с помощью сценария bash (или иным образом, если это необходимо).

Создать пользователя легко с помощью Bash, например ::1003*

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

181 голосов
/ 09 октября 2011

Вы также можете использовать chpasswd :

echo username:new_password | chpasswd

Итак, вы меняете пароль для пользователя username на new_password.

109 голосов
/ 28 января 2010

Вы можете запустить команду passwd и отправить ее по конвейеру. Итак, сделайте что-то вроде:

echo thePassword | passwd theUsername --stdin
70 голосов
/ 24 февраля 2010

Я спрашивал себя об этом и не хотел полагаться на скрипт Python.

Это строка для добавления пользователя с определенным паролем в одну строку:1004 *

49 голосов
/ 25 августа 2014

Код ниже работал в 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
29 голосов
/ 21 декабря 2010

Мне понравился подход Тралемонки к echo thePassword | passwd theUsername --stdin, хотя он не совсем сработал, как написано. Однако это сработало для меня.

echo -e "$password\n$password\n" | sudo passwd $user

-e означает \n как новую строку.

sudo - это корневой доступ для Ubuntu.

Двойные кавычки должны распознавать $ и расширять переменные.

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

Если не использовать переменные, я думаю, что это, вероятно, работает.

echo -e 'password\npassword\n' | sudo passwd username

Здесь должно быть достаточно одинарных кавычек.

22 голосов
/ 28 мая 2014

Следующее работает у меня и проверено на Ubuntu 14.04. Это один вкладыш, который не требует ввода пользователя.

sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME

Взято у @ Tralemonkey

13 голосов
/ 28 января 2010

Вы можете использовать опцию -p.

useradd -p encrypted_password newuser

К сожалению, для этого требуется, чтобы вы хэшировали пароль самостоятельно (где passwd сделает это за вас). К сожалению, не существует стандартной утилиты для хеширования некоторых данных, поэтому вам придется написать это самостоятельно.

Вот небольшой скрипт на Python, который я выбрал, чтобы сделать шифрование для вас. Предполагая, что вы назвали его pcrypt, вы бы написали приведенную выше командную строку по адресу:

useradd -p $(pcrypt ${passwd}) newuser

Несколько предупреждений, о которых следует знать.

  1. Во время работы pcrypt открытый текст будет виден любому пользователю с помощью команды ps.
  2. pcrypt использует функцию шифрования старого стиля - если вы используете что-то более современное, например, хеш MD5, вам нужно изменить 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),))
8 голосов
/ 05 июня 2017

Один вкладыш для создания пользователя sudo с домашним каталогом и паролем.

useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}
7 голосов
/ 20 августа 2011

--stdin не работает в Debian. Там написано:

`passwd: unrecognized option '--stdin'`

Это сработало для меня:

#useradd $USER
#echo "$USER:$SENHA" | chpasswd

Здесь мы можем найти несколько других хороших способов:

6 голосов
/ 28 января 2010

Вы можете использовать ожидаемый в вашем скрипте 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"
...