programing

Bash 스크립트를 사용하여 사용자 계정과 비밀번호를 자동으로 추가하는 방법은 무엇입니까?

goodcopy 2023. 4. 8. 11:23
반응형

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 ]#

chpasswd를 사용할 수도 있습니다.

echo username:new_password | chpasswd

를 '비밀번호'로 됩니다.username로로 합니다.new_password.

passwd 명령을 실행하여 파이핑된 입력을 전송할 수 있습니다.다음과 같은 작업을 수행합니다.

echo thePassword | passwd theUsername --stdin

저도 같은 질문을 하고 있었습니다.파이썬 스크립트에 의지하고 싶지 않았습니다.

다음 행은 정의된 비밀번호를 가진 사용자를 1개의 bash 행에 추가하는 행입니다.

useradd -p $(openssl passwd -crypt $PASS) $USER

다음 코드는 Ubuntu 14.04로 동작합니다.다른 버전/리눅스 버전에서 사용하기 전에 사용해 보십시오.

# 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우분투의

큰따옴표는 다음 사항을 인식하기 위한 것입니다.$변수를 확장합니다.

행을 하여 2회 합니다.passwd '이것'이 바로 '이것'입니다.passwd요합니니다다

변수를 사용하지 않는다면 이 방법이 효과가 있을 것 같습니다.

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

여기에서는 작은 따옴표로 충분합니다.

Ubuntu 14.04에서 테스트한 내용은 다음과 같습니다.사용자 입력이 필요 없는 1개의 라이너입니다.

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

@Tralemonkey에서 가져온 것

단일 라이너로 홈 디렉토리와 비밀번호를 가진 sudo 사용자를 만듭니다.

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

-p 옵션을 사용할 수 있습니다.

useradd -p encrypted_password newuser

아쉽게도 패스워드를 직접 해시해야 합니다(패스워드는 패스워드를 대신합니다).유감스럽게도 일부 데이터를 해시하는 표준 유틸리티는 없는 것 같기 때문에 직접 작성해야 합니다.

여기 Python 스크립트가 있습니다.암호화를 위해 준비했습니다.pcrypt 라고 하는 경우는, 상기의 커맨드 라인을 다음과 같이 기술합니다.

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

몇 가지 경고에 유의해야 합니다.

  1. pcrypt 실행 중에는 ps 명령어를 사용하여 모든 사용자가 플레인텍스트를 볼 수 있습니다.
  2. pcrypt는 구식 암호화 기능을 사용합니다.MD5 해시 등 보다 현대적인 것을 사용하고 있다면 pcrypt를 변경해야 합니다.

다음은 ccrypt입니다.

#!/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적혀 있어요하다

`passwd: unrecognized option '--stdin'`

이 방법은 효과가 있었습니다.

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

여기에서는 다른 좋은 방법을 찾을 수 있습니다.

bash 스크립트에서 expect를 사용할 수 있습니다.

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 --password `perl -e "print crypt('password','sa');"` root

Hell,가 오래된 에서 이것을 , HPUX를 할 수 .usermod.sam.

/usr/sam/lbin/usermod.sam -F -p `perl -e "print crypt('password','sa');"` username

-F는 스크립트를 실행하는 사용자가 현재 사용자인 경우에만 필요합니다.물론 해시를 작성하기 위해 Perl을 사용할 필요는 없습니다.대신 openssl 또는 다른 많은 명령을 사용할 수 있습니다.

난 내 셸 스크립트로 테스트를 해봤어.

  • $new_username 생성된 라는 뜻입니다.
  • $new_password password( 패스워드)라는 입니다.

센트의 경우OS

echo "$new_password" | passwd --stdin "$new_username"

Debian/Ubuntu의 경우

echo "$new_username:$new_password" | chpasswd

오픈의 경우수세

echo -e "$new_password\n$new_password" | passwd "$new_username"

여기 당신을 위해 그것을 할 대본이 있습니다.

필요에 따라서, 유저(또는 1명만)의 리스트를 추가할 수 있습니다.모두 한 번에 다른 패스워드를 사용할 수 있습니다.보너스로 스크립트의 마지막에 각 사용자의 패스워드 리스트가 표시됩니다.....원하는 경우 일부 사용자 유지 관리 옵션을 추가할 수 있습니다.

예를 들어 다음과 같습니다.

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

===========

이게 도움이 됐으면 좋겠다.

건배, 카렐

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

텍스트 파일, 예를 들어 텍스트 파일을 만듭니다.다음과 같이 txt 및 user: password 쌍으로 입력합니다.

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

텍스트를 저장합니다.txt 파일 및 실행

cat text.txt | chpassword

바로 그겁니다.솔루션은 (a) 확장 가능하며 (b) 명령줄에 비밀번호를 인쇄하지 않습니다.

트랄레몬키의 솔루션은 내게도 거의 먹힐 뻔 했지만, 완전히 먹히지는 않았어.결국 이렇게 된 거죠.

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

에 포함되지: 의의가가가 가가가2 가가 :-n에서는 에코가 '메아리'를 합니다.\n암호화되어 있는 패스워드에 대해서, 작은 따옴표로 내용을 셸(솔루션)에 의해서 해석되지 않게 합니다.

그런데 이 명령어는 CentOS 5.6 시스템에서 루트로 실행되어 궁금할 경우를 대비했습니다.

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

Red Hat / Cent의 경우OS는 사용자를 생성하고 비밀번호를 추가하여 사용자를 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 "$0 username passwd"
       exit
fi

user=$1
passwd=$2

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

스크립트로 사용자를 작성하기 위한 sudo 권한을 가진 다음 스크립트를 실행하십시오.

주의: 이 스크립트는 Redhat, Centos, Ubuntu, suse, kali, Arch, Bitname, BSD 등의 모든 Linux OS를 지원합니다.

#!/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”

언급URL : https://stackoverflow.com/questions/2150882/how-to-automatically-add-user-account-and-password-with-a-bash-script

반응형