我需要能够在我的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 ]#
您可以使用-p选项。
useradd -p encrypted_password newuser
不幸的是,这需要您自己对密码进行散列(passwd为您完成)。不幸的是,似乎没有一个标准实用程序来散列一些数据,所以您必须自己编写。
这是我编写的一个小Python脚本,用于为您加密。假设你把它命名为pcrypt,然后你可以把上面的命令行写到:
useradd -p $(pcrypt ${passwd}) newuser
这里有几个需要注意的警告。
当pcrypt运行时,任何用户都可以通过ps命令看到明文。
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),))
这里有一个脚本,将为您.....
如果你愿意,你可以添加一个用户列表(或者只是一个用户),一次完成,每个用户都有不同的密码。作为奖励,脚本的末尾会显示每个用户的密码. ....如果您愿意,您可以添加一些用户维护选项
如:
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
===========
希望这能有所帮助。
欢呼,
卡路
我知道我要过几年才会有这个想法,但我不敢相信居然没有人建议用户mod。
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或许多其他命令来代替它。
在Debian和Red Hat上都可以工作的解决方案。依赖于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('$2', '\$6\$' . '$salt' . '\$')") $1
用法:
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):)
创建一个文本文件,输入text.txt,并按如下方式填充用户:密码对:
user1:password1
user2:password2
...
usern:passwordn
保存“text.txt”文件并运行
cat text.txt | chpassword
就是这样。该解决方案是(a)可伸缩的,(b)不需要在命令行上打印密码。
请使用sudo权限运行以下脚本,通过脚本创建用户。
注意:此脚本支持所有linux操作系统,如Redhat, Centos, Ubuntu, suse, kali, Arch, Bitname, BSD....等
#!/bin/bash
#author: bablish jaiswal
#purpos: Linux user creation with a storng password
clear
#echo "Hi, I am a function to create sudo user with strong password. Kindly share following information"
echo -e "\n\n\n"
printf "\e[6;33mHi, I am a function to create sudo user with a strong password. Kindly share following information\e[0m";echo
read -p "user name:- " name #input name
read -p "complete path for $name home directory? example: /home/$name :- " home #user home path
( useradd -m -d $home $name -s /bin/bash ) > /dev/null 2>&1
pass=$(cat /dev/urandom |tr -dc "[[:graph:]]" |head -c16)
(echo -e "$pass\n$pass" | passwd $name ) > /dev/null 2>&1
echo " "
printf "\e[6;33m-----------------------------Copy below credentials-------------------------\e[0m";echo
echo -e "User:- $name\nHomeDir:- $home\npassword:- $pass"
#svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{$1=""}1')
svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{print $2}')
echo "${name} ${svalue} NOPASSWD:ALL" >> /etc/sudoers && echo “Remark:- User $name is a sudo user”