このユーザー生成スクリプトにはパスワードが設定されていません。

このユーザー生成スクリプトにはパスワードが設定されていません。

次のスクリプトでは、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ビデオも信頼してはいけません。

おすすめ記事