GNU/Linux >> Linux の 問題 >  >> Linux

AWSのLinuxEC2インスタンスでユーザーを作成し、シェルスクリプトを使用して公開鍵を追加する方法

ユーザーを作成して公開鍵を追加するのは、非常に面倒な場合があります。この記事では、シェルスクリプトを使用してこのプロセスを自動化する方法を説明します。これにより、タスクを手動で実行した場合に発生する可能性のある人的エラーを回避できます。

前提条件
  1. シェルスクリプトの基本的な理解。
  2. AWSアカウント(アカウントがない場合は作成します)。
  3. sudoアクセス権を持つユーザーのEC2インスタンス(EC2インスタンスがない場合、またはEC2インスタンスを作成する方法については、ここをクリックしてください)
何をしますか
  1. スクリプトと秘密鍵と公開鍵のペアを作成します。
  2. スクリプトを使用してユーザーを作成します。
スクリプトと秘密公開鍵のペアを作成します

次のコードを含むスクリプトを作成します。次のリンクのGithubリポジトリで同じコードを見つけることができます。

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/shell-scripts/aws-ec2-create-user-add-public-key/provide-access.sh
>
File: provide-access.sh
helpFunction()
{ 
      echo ""
      printf "\033[1;32mUsage: $0 -K <internal.pem> -U <internal-user> -I <internal-ip> -u <user-to-be-created> -k <\"public-key-string-shared-by-the-user\">"
      echo ""
      echo -e "\t-K \".pem key of the server on which a new user has be created\""
      echo -e "\t-U UserName of the server on which a new user has be created"
      echo -e "\t-I IP of the server on which a new user has be created "
      echo -e "\t-u user to be created on the internal server"
      echo -e "\t-k \"public key string to be added shared by the user\""
      echo -e "Put Public Key in double quotes"

      echo -e  "e.g."
      echo "./provide-access.sh -U ubuntu -K /Users/cloudcover/Documents/Rahul/access/rahuls.pem -I 192.168.134.100  -u rahul -k  \"ssh-rsa Z1rbx6/F/ZntfkvKzX6e82oYOOLb9QtTu4IO+W560+afjp1xLOYqWKeEsZycq0iyHX5herNWxorLU3gGnwGSABCb+62yP3eaESMMHMR91OeDsxeLL41ABANofMROQ8yDjNcYVUxjKWyzNzuJxgnN5KngwkUOWHGbCFmHUsz1WVuWA+rhhk1CPZFywUdsDeGR/Dxd+oNKGvaKGIQuDqK1vY5GiLg0N+OvanTPbLper3/Z5A5d62fRF6+mensZGsKW543 key-name\""

      echo -e "\033[0m" #reset color
      exit 1 # Exit script after printing help
}

while getopts "I:K:U:u:k:" opt
do
   case "$opt" in
      K ) internalServerPemKey="$OPTARG" ;;
      U ) internalServerUser="$OPTARG" ;;	
      I ) internalServerIP="$OPTARG" ;;
      u ) userName="$OPTARG" ;;
      k ) keyString="$OPTARG" ;;
      ? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
   esac
done

# Print helpFunction in case parameters are empty
if [ -z "$internalServerIP" ] || [ -z "$internalServerPemKey" ] || [ -z "$internalServerUser" ] || [ -z "$userName" ] || [ -z "$keyString" ]
then
      printf "\033[1;31m"
      echo "Some or all of the parameters are empty";
      helpFunction
fi

# Begin script in case all parameters are correct
printf "\033[1;33m------------------------------------------------------------------Before ssh"
echo -e "\033[0m" #reset color
echo ".pem key of the server on which a new user has be created		:  	$internalServerPemKey"
echo "UserName of the server on which a new user has be created		: 	$internalServerUser"
echo "IP of the server on which a new user has be created			:	$internalServerIP"
echo "user to be created on the internal server				:	$userName"
echo "public key string to be added shared by the user			:	$keyString"


printf "\033[1;31mLogging into: "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"

ssh -i "$internalServerPemKey" "$internalServerUser"@"$internalServerIP" << HERE
      printf "\033[1;33m------------------------------------------------------------------After ssh"
      echo -e "\033[0m" #reset color
      echo "Creating user \"$userName\" <--- on="" ---=""> \"$internalServerIP\" <---"
      sudo useradd -m $userName
      sleep 2
      echo "Changing user to \"$userName\""
      sudo -i -u $userName bash << EOF
      echo "User Switched To;"
      whoami
      echo "creating dir: .ssh"
      mkdir -p .ssh
      echo "changing permission of dir .ssh to 700"
      chmod 700 .ssh
      echo "creating a file: .ssh/authorized_keys"
      touch .ssh/authorized_keys
      echo "changing permission of .ssh/authorized_keys to 600"
      chmod 600 .ssh/authorized_keys
      echo "appending $keyString "
      echo "to .ssh/authorized_keys"
      echo '$keyString' >> .ssh/authorized_keys
      echo "Content of .ssh/authorized_keys"
      cat .ssh/authorized_keys
      printf "\033[1;31mExiting from         ---> "$internalServerPemKey" "$internalServerUser"@"$internalServerIP"\033[0m\n"
      #echo "Existing user	---> $userName"
EOF
HERE

作成するユーザーのキーペアを作成します。ここでは、これらのキーを/ tmp /

に保存します
ssh-keygen

ls /tmp/id_rsa*

スクリプトを使用してユーザーを作成する

それでは、次のコマンドでユーザーを作成しましょう。スクリプトの値を有効な値に変更する必要があります。ローカルのLinuxシステムから次のコマンドを実行します。

スクリプトを実行する前に、その権限を変更してください

chmod 744 provide-access.sh
./provide-access.sh -U ubuntu -K ~/Downloads/howtoforge-test.pem -I ec2-15-236-64-128.eu-west-3.compute.amazonaws.com -u rahul -k "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzS60i+fPFEYMbA1w8dLOFK2EAV+vFtlckSU
5+DGxtLHp3smpAxTDkKYJ33bM9Cs6toMDD0HITAH6VRyrgJ4V+Z4EpO6w8kHp3g2Fro5b4X2VX4GWsVdmkLkj0KbUhbd2sKTx/O2x+wNlxT7cUvr0ugii9FIXlXLLjwLsw47bEUNSIhwJB+x7u8tfOc00IBzhghCU9DjfGzMNxWdwpWg2GsAoRWQAT1YGO3laqPpxSVN6RKAzsTJ
gSar7bwJsjEtiCb7+of95SIR/lkP/e1hpsbuDUpc94mTAkde88pFPE/799w+YnbUwaj+1Y8e9R1QRjbs9Xh+b2wAgaAlMTPEFh [email protected]"

ここで

  • -U =ubuntu=EC2インスタンスにログインするためのsudoアクセス権を持つユーザー。
  • -K =〜/ Downloads / howtoforge-test.pem=EC2インスタンスにログインするために使用します。
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com=EC2インスタンスのIP。
  • -u =rahul=作成するユーザー
  • -k=作成するユーザーの公開鍵。

これらの値はあなたによって異なります。有効な値を追加してください。

ユーザーが作成されたことがわかります。

これで、EC2インスタンスにログインして、ユーザーが作成されたかどうかを確認できます。

ssh -i ~/Downloads/howtoforge-test.pem [email protected]
cat /etc/passwd | grep rahul

これで、作成したばかりのユーザー、つまりrahulを使用してサーバーへのログインを試みることができます。

その前に、サーバーへの認証に使用する秘密鍵のアクセス許可を変更してください。

chmod 400 /tmp/id_rsa.pub
ssh -i /tmp/id_rsa.pub [email protected]

上のスクリーンショットでは、作成したユーザーを使用してサーバーにログインできたことがわかります。

また、ユーザーに追加したキーを確認してください。スクリプトに渡した公開鍵がサーバーに追加されたことがわかります。

結論

この記事では、UbuntuEC2インスタンスでユーザーを作成して公開鍵を追加するプロセスを自動化するスクリプトを見ました。

この自動化は、ユーザーを手動で作成して公開鍵を追加するために必要な労力を最小限に抑えるのに役立ちます。


Linux
  1. Linuxシェルスクリプトで数値と文字列を比較する方法

  2. Linuxでユーザーグループを作成および削除する方法

  3. シェルスクリプトを使用して回転アニメーションを作成するにはどうすればよいですか?

  1. Terraformを使用してAWSでRDSインスタンスを作成する方法

  2. GUI を使用して Linux で PGP キーを作成 (および公開) する方法

  3. Pythonを使用してLinuxでユーザーを作成する方法

  1. Terraformを使用してAWSでEC2インスタンスを作成します

  2. Linuxで環境変数とシェル変数を設定/作成する方法

  3. Linux シェル スクリプトでグループが存在するかどうかを確認し、存在しない場合は追加する方法