0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

bashでlinuxのユーザーのパスワードを変更するスクリプトを実行(メモ)

Posted at

サーバーの移行Prjでセキュリティ上、今までのユーザーのパスワードを変更する要望があったので、まとめてパスワードを変更する

やってみたので、メモとして残す。

環境

  • AWS EC2
  • RHEL8.8

bashスクリプト説明

  • Linuxユーザーのパスワードを変更するスクリプト
  • CSVファイルのユーザー名と新しいパスワードに基づいて、ユーザーのパスワードを変更する。

前提

  • csvファイルを用意
    • 形式 ユーザー名,パスワード ファイル名はなんでも可 例)user_password.csv
  • 以下記述の.shのスクリプトを用意 名前例./change_password_script.sh

実行方法

sudo bash ./change_password_script.sh user_password.csv

ヘルプオプションをつけると説明を表示する

sudo bash ./change_password_script.sh  --help

パスワードを変更するスクリプト

#!/bin/bash

# 説明
## Linuxユーザーのパスワードを変更するスクリプト
## CSVファイルのユーザー名と新しいパスワードに基づいて、ユーザーのパスワードを変更する。

# 前提
## ファイル名なんでも可のcsvファイルを用意(例user_password.csv)
## 形式 ユーザー名,パスワード

# 実行
## sudo bash ./change_password_script.sh user_password.csv
## helpオプションをつけて説明を表示
## sudo bash ./change_password_script.sh  --help

# ヘルプメッセージ
help_message="使用方法: $0 <csv_ファイル>
CSVファイル内のユーザーのパスワードを変更します。
CSVファイルの形式: ユーザー名,パスワード"

# ヘルプ関数
show_help() {
    echo "$help_message"
    exit 0
}

# 引数が0の場合、ヘルプメッセージを表示して終了
if [ $# -eq 0 ]; then
    show_help
fi

# 引数からCSVファイルのパスを受け取る
csv_file="$1"

# ヘルプオプションが指定された場合、ヘルプメッセージを表示して終了
if [ "$csv_file" == "--help" ] || [ "$csv_file" == "-h" ]; then
    show_help
fi

# CSVファイルが存在しない場合、エラーメッセージを表示して終了
if [ ! -f "$csv_file" ]; then
    echo "エラー: 指定されたCSVファイル '$csv_file' が存在しません。"
    exit 1
fi

# CSVファイルからユーザー名と新しいパスワードを読み取り、変更します。
while IFS=',' read -r user password; do
    # ユーザーが存在するか確認
    if ! id "$user" &>/dev/null; then
        echo "エラー: ユーザー '$user' が存在しません。"
        continue
    fi

    # パスワードを変更
    echo -e "$password\n$password" | passwd "$user" 2>/dev/null

    if [ $? -eq 0 ]; then
        echo "ユーザー $user のパスワードを変更しました。"
    else
        echo "エラー: ユーザー $user のパスワードの変更に失敗しました。"
    fi
done < "$csv_file"

# スクリプトの実行が完了しました。
echo "スクリプトの実行が完了しました。"

一応以下2つのエラーハンドリングも追加してます。

  • ユーザーが存在しない
  • パスワードが有効でない(8桁以上じゃないとパスワード変更できない、メッセージは一般的なメッセージ)

AWSでテストをする

  1. SSHでEC2インスタンスに接続:

    ssh -i ~/.ssh/公開鍵.pem  ec2-user@パブリックIPアドレス 
    
  2. ユーザーを作成:
     試したいだけなので、なんでもいいので、user1とかにしてます。

    sudo useradd user1
    sudo useradd user2
    sudo useradd user3
    
    
  3. パスワードを設定:
    パスワードの入力を2回求められます。8桁以上

    sudo passwd user1    
    

検証について

  スクリプト実行後パスワードがちゃんと設定されているか確認のため、公開鍵ではなく、パスワードで認証するように変更する。

  1. SSHサーバーのパスワード認証を可能にする:

       sudo vi /etc/ssh/sshd_config
    

  この行を見つけて、コメントアウトを削除

 PasswordAuthentication yes    
  1. SSHサービスを再起動:
    変更を反映させるためにSSHサービスを再起動。

        sudo systemctl restart sshd        
    

これで準備ができた。

シェルスクリプト作成&実行

シェルスクリプト作成

  $ vi change_password_script.sh
  $ cat change_password_script.sh

上で書いたスクリプトが表示されればOK

シェルスクリプト実行

    $ sudo bash change_password_script.sh  --help
    使用方法: change_password_script.sh <csv_ファイル>
    CSVファイル内のユーザーのパスワードを変更します。
    CSVファイルの形式: ユーザー名,パスワード

helpコマンドでちゃんとhelpメッセージが出ることを確認

csvファイルを置く

    $ vi user_password.csv
    $ cat user_password.csv
    user1,test1test1
    user2,test2test2
    user3,test3test3

スクリプト実行

    $ sudo bash ./change_password_script.sh user_password.csv
    Changing password for user user1.
    New password: BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
    Retype new password: passwd: all authentication tokens updated successfully.
    ユーザー user1 のパスワードを変更しました。
    Changing password for user user2.
    New password: BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
    Retype new password: passwd: all authentication tokens updated successfully.
    ユーザー user2 のパスワードを変更しました。
    Changing password for user user3.
    New password: BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
    Retype new password: passwd: all authentication tokens updated successfully.
    ユーザー user3 のパスワードを変更しました。
    スクリプトの実行が完了しました。

実行できた。

一度ログアウトして、userでログインできるか試す。

    >ssh user1@パブリックIPアドレス
    user1@パブリックIPアドレス's password:

ログインできればちゃんとパスワードが変更されている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?