222

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

19 に答える 19

222

chpasswdを使用することもできます:

echo username:new_password | chpasswd

したがって、ユーザーのパスワードをに変更しusernameますnew_password

于 2011-10-09T03:41:38.467 に答える
133

passwdコマンドを実行して、パイプ入力を送信できます。したがって、次のようなことを行います。

echo thePassword | passwd theUsername --stdin
于 2010-01-27T23:30:23.790 に答える
110

私は自分自身に同じことを自問していましたが、Pythonスクリプトに依存したくありませんでした。

これは、1つのbash行に定義されたパスワードを持つユーザーを追加する行です。

useradd -p $(openssl passwd -crypt $PASS) $USER
于 2010-02-24T18:37:54.627 に答える
67

以下のコードはUbuntu14.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
于 2014-08-25T05:35:10.603 に答える
35

私はTralemonkeyのアプローチが好きでしecho thePassword | passwd theUsername --stdinたが、書かれているようにはうまくいきませんでした。しかし、これは私にとってはうまくいきました。

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

-e\n改行として認識することです。

sudoUbuntuのrootアクセスです。

$二重引用符は、変数を認識して展開するためのものです。

上記のコマンドは、パスワードと改行を2回、に渡します。passwdこれはpasswd必要なものです。

変数を使用しない場合、これはおそらく機能すると思います。

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

ここでは一重引用符で十分です。

于 2010-12-21T09:30:35.493 に答える
27

以下は私のために動作し、Ubuntu14.04でテストされています。これは、ユーザー入力を必要としないワンライナーです。

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

@Tralemonkeyから取得

于 2014-05-28T03:37:06.750 に答える
18

ホームディレクトリとパスワードを使用してsudoユーザーを作成するための単一のライナー。

useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}
于 2017-06-05T07:27:19.953 に答える
12

-pオプションを使用できます。

useradd -p encrypted_password newuser

残念ながら、これにはパスワードを自分でハッシュする必要があります(passwdがそれを行います)。残念ながら、一部のデータをハッシュするための標準的なユーティリティはないようです。そのため、自分でデータを作成する必要があります。

これが、暗号化を行うために作成した小さなPythonスクリプトです。これをpcryptと呼んだとすると、上記のコマンドラインを次のように記述します。

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

注意すべきいくつかの警告。

  1. pcryptの実行中、平文はpsコマンドを介してすべてのユーザーに表示されます。
  2. 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),))
于 2010-01-27T22:53:11.300 に答える
8

--stdinDebianでは動作しません。それは言う:

`passwd: unrecognized option '--stdin'`

これは私のために働いた:

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

ここで、他のいくつかの良い方法を見つけることができます:

于 2011-08-20T00:59:05.423 に答える
6

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"
于 2010-01-27T22:56:23.913 に答える
5

私はこの数年後に来ることを知っていますが、誰も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または他の多くのコマンドを使用できます。

于 2015-05-21T22:50:48.767 に答える
4

私は自分のシェルスクリプトでテストしました。

  • $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"
于 2017-04-07T08:59:13.450 に答える
3

これがあなたのためにそれをするスクリプトです.....

必要に応じて、ユーザーのリスト(または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

===========

お役に立てれば。

乾杯、カレル

于 2010-05-29T23:26:33.203 に答える
1

Tralemonkeyのソリューションは、私にとってもほとんど機能しました...しかし、完全ではありません。私はそれをこのようにすることになりました:

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

彼のソリューションに含まれていなかった2つの重要な詳細、暗号化されるパスワードに-nエコーが追加\nされないようにします。私の場合、一重引用符はコンテンツがシェル(bash)によって解釈されないように保護します。

ところで、誰かが疑問に思っている場合に備えて、CentOS5.6システムでrootとしてこのコマンドを実行しました。

于 2011-06-25T01:54:59.003 に答える
1

DebianとRedHatの両方で機能するソリューション。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
于 2015-06-25T15:12:25.557 に答える
1

IBMから(https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds1/chpasswd.htm):

text.txtなどのテキストファイルを作成し、次のようにuser:passwordのペアを入力します。

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

text.txtファイルを保存し、実行します

cat text.txt | chpassword

それでおしまい。解決策は(a)スケーラブルであり、(b)コマンドラインにパスワードを印刷する必要はありません。

于 2016-06-26T06:22:30.590 に答える
0
{ echo $password; echo $password; } | passwd $username 
于 2015-02-07T12:48:35.550 に答える
0

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
于 2016-12-19T13:15:52.750 に答える
0

利用方法:./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;
于 2017-03-15T02:42:00.763 に答える