Как автоматически добавить учетную запись пользователя И пароль со сценарием Bash?

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

Легко создать пользователя через 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 ]#
187
задан Alex.K. 15 September 2014 в 04:19
поделиться

5 ответов

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

echo thePassword | passwd theUsername --stdin
115
ответ дан 23 November 2019 в 05:44
поделиться

Вы можете использовать ожидаю, что в вашем скрипте Bash.

из http://www.seanodonnellell.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"
6
ответ дан 23 November 2019 в 05:44
поделиться

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

useradd -p encrypted_password newuser

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

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

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

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

  1. В то время как PCRYPT работает, открытый текст будет виден любому пользователю через команду PS.
  2. PCRYPT использует старую функцию Crypt стилей - если вы используете что-то более современное, как хеш 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),))
13
ответ дан 23 November 2019 в 05:44
поделиться

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

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

useradd -p $(openssl passwd -1 $PASS) $USER
75
ответ дан 23 November 2019 в 05:44
поделиться

Вот скрипт, который сделает это за вас .....

Вы можете добавить список пользователей (или только одного пользователя), если хотите, все одним махом, и у каждого будет свой пароль. В качестве бонуса в конце скрипта вам будет представлен список паролей каждого пользователя. .... Если вы хотите, вы можете добавить в скрипт некоторые опции обслуживания пользователей

например:

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 "$1" ] || { echo >&2 ERROR: The input file does not exists. ; exit 1; }
   TMPIN=$(mktemp)
   # Remove blank lines and delete duplicates 
   sed '/^$/d' "$1"| 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

===========

Надеюсь, это поможет.

Будьте здоровы, Carel

3
ответ дан 23 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: