次のスクリプトでは、Ubuntuシステムでユーザーを作成し、任意のパスワードを生成する必要があります。
#!/bin/bash
#Script should execute with sudo/root access
if [[ "${UID}" -ne 0 ]]
then
echo "Please run with sudo or root"
exit 1
fi
#User should provide atleast one argument as username else guide him
if [[ "${#}" -lt 1 ]]
then
echo "Usage: ${0} USER_NAME [COMMENT]..."
echo "Create a user with name USER_NAME and comments field of COMMENT"
exit 1
fi
#Store 1st argument as user name
USER_NAME="${1}"
#In case of more than one argument, store it as account comments
shift
COMMENT="${@}"
#Create a password
PASSWORD=$(date +%s%N)
#Create the user
useradd -c "$COMMENT" -m $USER_NAME
#Check if user is successfully created or not
if [[ $? -ne 0 ]]
then
echo "The Account could not be created"
exit 1
fi
#Set the password for the user
echo $PASSWORD | passwd --stdin $USER_NAME
#Check if password is successfully set or not
if [[ $? -ne 0 ]]
then
echo "The password could not be set"
exit 1
fi
#Force password change on first login
passwd -e $USER_NAME
#Display username, password and the host where the user was created
echo
echo "Username: $USER_NAME"
echo
echo "Password: $PASSWORD"
echo
echo "Hostname: $(hostname)"
出力:
root@Sengh:/home/sengh/scripts# bash user_create.sh singh this is a
passwd: unrecognized option '--stdin'
Usage: passwd [options] [LOGIN]
Options:
-a, --all report password status on all accounts
-d, --delete delete the password for the named account
-e, --expire force expire the password for the named account
-h, --help display this help message and exit
-k, --keep-tokens change password only if expired
-i, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --lock lock the password of the named account
-n, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-q, --quiet quiet mode
-r, --repository REPOSITORY change password in REPOSITORY repository
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR directory prefix
-S, --status report password status on the named account
-u, --unlock unlock the password of the named account
-w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
-x, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
The password could not be set
ベストアンサー1
うまくいかない理由は、いくつかのコメントですでに指摘したように、コマンド出力から明らかです。
passwd: unrecognized option '--stdin'
YouTubeで成功したと言いましたね。さて、YouTube(または他のチュートリアル)では多くの機能が機能する可能性がありますが、ディストリビューション、ツールバージョンなどが異なるため、機能しない可能性があります。あなたの特定のケースでは、次のことができます。シェルスクリプトでpasswdコマンドを使用するLinuxOPsysチュートリアル:
注:エラーメッセージが表示された場合は、
passwd: unrecognized option '--stdin'
システムのpasswdコマンドがこの--stdin
オプションをサポートしていないことを意味します。このオプションは通常、CentOS StreamやRHELなどの一部のディストリビューションで使用できますが、Ubuntuなどの他のディストリビューションにはない可能性があります。
したがって、YouTubeビデオに出てくる人は、おそらくこのオプションをサポートするディストリビューションの1つを使用しています。しかし、ディストリビューションでは、このオプションは明らかにいいえ書くことができる。
ほとんどの実装がこのオプションをサポートしていないのはなぜですかpasswd
?以下でこの質問に対する答えを見つけることができます。バッシュFAQページ:
Traditional は
passwd(1)
標準入力では読みません。これは 故意に。これはあなたを保護するためのものです。パスワードはプログラムに入れたり生成したりするためのものではありません。渡すプログラム。正常な脳を持つ実際の人間の指でのみ入力でき、どこにも記録されません。したがって、前にpasswd(1)
作成者の視点とあなたがしてはいけないスクリプト入力を作成しようとしていますpasswd(1)
。
上記の警告を読んだ後もスクリプトで自動化に固執する場合は、同じLinuxOPsysチュートリアルで答えを見つけることができます。 chpasswdの使用@NicolasFormichellaが提案したように部分的に回答。
あなたコメントしました。この答えの場合:
パスワードを設定する必要があるユーザーに言及するのではなく、変数を使用してどのユーザーを作成する必要があるのかをユーザーから読みたいと思います。
まあ、まだ変数を使うことができます。変える
echo $PASSWORD | passwd --stdin $USER_NAME
使用:
echo "$USER_NAME:$PASSWORD" | chpasswd
しかし、通常、あなたが遭遇するどんなYouTubeビデオも信頼してはいけません。