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



мне нужно иметь возможность создавать учетные записи пользователей на моем 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 ]#
2357   19  

19 ответов:

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

echo thePassword | passwd theUsername --stdin

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

echo username:new_password | chpasswd

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

Я спрашивал себя то же самое, и не хотел полагаться на скрипт Python. Это строка для добавления пользователя с определенным паролем в одну строку bash:

/usr/sbin/useradd -p \`openssl passwd -1 $PASS\` $USER

ниже код работал в 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

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

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

-e - это признать \n как новую строку.

sudo - это права доступа root для Ubuntu.

двойные кавычки признать $ и разверните переменные.

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

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

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

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

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

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

взято из @Tralemonkey

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

useradd -p encrypted_password newuser

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

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

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

пару предупреждения, чтобы быть в курсе.

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

--stdin не работает в Debian. Он говорит:

`passwd: unrecognized option '--stdin'`

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

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

здесь мы можем найти некоторые другие хорошие стороны:

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

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

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

useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}

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

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

как:

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

===========

надеюсь, что это помогает.

Ура, Карел

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

  • $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"

решение, которое работает на Debian и красной шляпе. Зависит от 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('', '$6$' . '$salt' . '$')") 

использование:

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):

создать текстовый файл, скажем текст.txt и заполнить его с помощью пары user: password следующим образом:

user1:password1
user2:password2
...
usern:passwordn

сохранить текст.txt файл, и запустить

cat text.txt | chpassword

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

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

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

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

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

{ echo $password; echo $password; } | passwd $username 

для 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

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

код:

#!/bin/bash
# my_add_user.sh

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

user=
passwd=

useradd $user -d /data/home/$user  -m  ;
echo $passwd | passwd $user --stdin;

Comments

    Ничего не найдено.