Как автоматически добавить учетную запись пользователя и пароль с помощью скрипта 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 ]

4 голосов
/ 22 мая 2015

Я знаю, что приду через несколько лет, но я не могу поверить, что никто не предложил 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 или много других команд.

3 голосов
/ 30 мая 2010

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

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

как:

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

2 голосов
/ 07 апреля 2017

Я тестировал в своем собственном сценарии оболочки.

  • $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"
2 голосов
/ 26 июня 2016

От 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

Вот и все. Решение является (а) масштабируемым и (б) не включает печать паролей в командной строке.

1 голос
/ 25 июня 2015

Решение, которое работает как в 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
1 голос
/ 25 июня 2011

Решение Tralemonkey для меня тоже почти сработало ... но не совсем. В итоге я сделал это так:

echo -n '$#@password@#$' | passwd myusername --stdin

2 ключевые детали, которые его решение не включало, -n не позволяет эхо добавлять \n к паролю, который шифруется, а одинарные кавычки защищают содержимое от интерпретации оболочкой (bash) в мой случай.

Кстати, я запустил эту команду от имени root в системе CentOS 5.6 на случай, если кому-то интересно.

0 голосов
/ 15 марта 2017

использование: ./my_add_user.sh USER PASSWD

код:

#!/bin/bash
# my_add_user.sh

if [ "$#" -lt 2 ] 
 then
       echo "$0 username passwd"
       exit
fi

user=$1
passwd=$2

useradd $user -d /data/home/$user  -m  ;
echo $passwd | passwd $user --stdin;
0 голосов
/ 19 декабря 2016

Для 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
0 голосов
/ 07 февраля 2015
{ echo $password; echo $password; } | passwd $username 
...