У меня должна быть способность создать учетные записи пользователей на моем 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 ]#
Вы можете запустить команду Passwd и отправить ее ввода. Итак, сделайте что-то вроде:
echo thePassword | passwd theUsername --stdin
Вы можете использовать ожидаю, что в вашем скрипте 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"
Вы можете использовать опцию -P.
useradd -p encrypted_password newuser
К сожалению, это требует от вас пароль самостоятельно (где Passwd делает это для вас). К сожалению, кажется, не станет стандартной утилитой для хэш некоторых данных, поэтому вам придется написать, что самостоятельно.
Вот небольшой сценарий Python, который я взбил, чтобы сделать шифрование для вас. Предполагая, что вы назвали его PCRYPT, вы бы написали приведенную вышеуказанную командную строку к:
useradd -p $(pcrypt ${passwd}) newuser
пару предупреждений, о которых нужно знать.
И вот 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),))
Я спрашивал себя о том же и не хотел полагаться на скрипт Python.
Это строка для добавления пользователя с определенным паролем в одну строку bash:
useradd -p $(openssl passwd -1 $PASS) $USER
Вот скрипт, который сделает это за вас .....
Вы можете добавить список пользователей (или только одного пользователя), если хотите, все одним махом, и у каждого будет свой пароль. В качестве бонуса в конце скрипта вам будет представлен список паролей каждого пользователя. .... Если вы хотите, вы можете добавить в скрипт некоторые опции обслуживания пользователей
например:
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