私は自分の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 ]#
Passwdコマンドを実行してそれにパイプ入力を送信することができます。だから、のような何かをする:
echo thePassword | passwd theUsername --stdin
chpasswd を使うこともできます。
echo username:new_password | chpasswd
したがって、ユーザーusername
のパスワードをnew_password
に変更します。
私は自分自身に同じことを尋ねていましたが、Pythonスクリプトに頼りたくはありませんでした。
これは、1つのbash行に定義済みパスワードを持つユーザーを追加するための行です。
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
Tralemonkeyのecho thePassword | passwd theUsername --stdin
のアプローチは好きでしたが、書かれているとおりにはうまくいきませんでした。しかしこれは私のために働いた。
echo -e "$password\n$password\n" | Sudo passwd $user
-e
は\n
を改行として認識することです。
Sudo
name__は、Ubuntuのrootアクセスです。
二重引用符は$
を認識して変数を展開するためのものです。
上記のコマンドは、パスワードと新しい行をpasswd
name__に2回渡します。これはpasswd
name__が必要とするものです。
変数を使用しない場合は、おそらくこれでうまくいくと思います。
echo -e 'password\npassword\n' | Sudo passwd username
一重引用符で十分です。
以下は私のために働き、Ubuntu 14.04でテストされました。ユーザー入力を必要としない1つのライナーです。
Sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME
@Tralemonkeyから取得した
-pオプションを使用できます。
useradd -p encrypted_password newuser
残念ながら、これにはパスワードを自分でハッシュする必要があります(passwdがあなたに代わってそれを行います)。残念ながら、いくつかのデータをハッシュするための標準的なユーティリティはないようであるので、あなたはそれを自分で書く必要があるでしょう。
これが、私があなたのために暗号化をするために作った小さなPythonスクリプトです。あなたがそれをpcryptと呼んだと仮定すると、あなたはそれからあなたの上記のコマンドラインを書くだろう:
useradd -p $(pcrypt ${passwd}) newuser
知っておくべき警告がいくつかあります。
そしてこれが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 __== "__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
ここで他の良い方法を見つけることができます。
ホームディレクトリとパスワードでSudoユーザーを作成するためのシングルライナー。
useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G Sudo ${USERNAME}
あなたの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を提案したとは信じられません。
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や他の多くのコマンドを使用できます。
これはあなたのためにそれをするスクリプトです.....
必要に応じて、ユーザーのリスト(または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
===========
お役に立てれば。
乾杯、カレル
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)コマンドラインでパスワードを表示することを含みません。
私は自分のシェルスクリプトでテストしました。
$new_username
は新しく作成されたユーザーを意味します$new_password
は新規パスワードを意味しますecho "$new_password" | passwd --stdin "$new_username"
echo "$new_username:$new_password" | chpasswd
echo -e "$new_password\n$new_password" | passwd "$new_username"
Tralemonkeyの解決策は私にも同様にうまくいきました…しかし、それほどではありませんでした。私はこのようにしてやってしまいました:
echo -n '$#@password@#$' | passwd myusername --stdin
彼の解決策には含まれていなかった2つの重要な詳細、-n
は暗号化されているパスワードに\n
を追加することからの反響を防ぎ、私の場合は一重引用符がシェルによる解釈から保護されます。
ところで私は誰もが疑問に思っている場合に備えてCentOS 5.6システム上でrootとしてこのコマンドを実行しました。
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
これは効果的にワンライナーとして使用できますが、パスワード、salt、およびユーザー名を適切な場所に自分で指定する必要があります。
useradd -p $(Perl -e "print crypt('pass', '\$6\$salt\$')") 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 "$0 username passwd"
exit
fi
user=$1
passwd=$2
useradd $user -d /data/home/$user -m ;
echo $passwd | passwd $user --stdin;
{ echo $password; echo $password; } | passwd $username