So erstellen Sie einen Benutzer auf einer Linux EC2-Instanz auf AWS und fügen ihm einen öffentlichen Schlüssel mithilfe eines Shell-Skripts hinzu

Das Anlegen eines Benutzers und das Hinzufügen eines öffentlichen Schlüssels zu diesem kann sehr mühsam sein. In diesem Artikel werden wir sehen, wie dieser Prozess mithilfe eines Shell-Skripts automatisiert werden kann, was uns helfen kann, menschliche Fehler zu vermeiden, die auftreten können, wenn wir die Aufgabe manuell erledigen.

Vorraussetzungen

  1. Grundlegendes Verständnis von Shell-Skripten.
  2. AWS-Konto (Erstellen Sie es, wenn Sie noch keines haben).
  3. EC2-Instanz mit dem Benutzer mit sudo-Zugriff (Klicken Sie hier, um zu lernen, wie man eine EC2-Instanz erstellt, wenn Sie keine haben oder wenn Sie es lernen möchten)

Was werden wir tun

  1. Erstellen Sie ein Skript und ein privat-öffentliches Schlüsselpaar.
  2. Erstellen Sie einen Benutzer mit dem Skript.

Erzeugen Sie ein Skript und ein privat-öffentliches Schlüsselpaar

Erstellen Sie ein Skript mit dem folgenden Code. Sie finden den gleichen Code in meinem Github-Repositorium unter dem folgenden Link.

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

Erzeugen Sie ein Schlüsselpaar für den zu erstellenden Benutzer. Hier speichere ich diese Schlüssel in /tmp/

ssh-keygen

Erzeugen eines Schlüsselpaares

ls /tmp/id_rsa*

Auflisten der erstellten Tasten

Anlegen eines Benutzers mit dem Skript

Nun wollen wir mit dem folgenden Befehl einen Benutzer anlegen. Sie müssen die Werte im Skript mit den für Sie gültigen Werten ändern. Führen Sie den folgenden Befehl von Ihrem lokalen Linux-System aus.

Bevor Sie das Skript ausführen, ändern Sie dessen Berechtigungen

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]"

hier,

  • -U = ubuntu = Benutzer mit sudo-Rechten zur Anmeldung an der EC2-Instanz.
  • -K =~/Downloads/howtoforge-test.pem = Benutzer mit Zugriff auf die EC2-Instanz.
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com = IP der EC2-Instanz.
  • -u = rahul = Anzulegender Benutzer
  • -k = Öffentlicher Schlüssel des zu erstellenden Benutzers.

Diese Werte sind für Sie unterschiedlich. Fügen Sie die für Sie gültigen Werte hinzu.

Einen Benutzer anlegen

Sie können sehen, dass der Benutzer erstellt wurde.

Nun können Sie sich an der EC2-Instanz anmelden, um zu überprüfen, ob der Benutzer erstellt wurde oder nicht.

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

Prüfen, ob der Benutzer angelegt ist

Sie können nun versuchen, sich mit dem soeben erstellten Benutzer, also rahul, am Server anzumelden.

Ändern Sie zuvor die Berechtigungen des privaten Schlüssels, der für die Authentifizierung am Server verwendet werden soll.

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

Versuchen Sie, sich anzumelden

Im obigen Screenshot können Sie sehen, dass wir uns mit dem von uns erstellten Benutzer beim Server anmelden konnten.

Überprüfen Sie auch den Schlüssel, den wir dem Benutzer hinzugefügt haben. Sie werden feststellen, dass der öffentliche Schlüssel, den wir an das Skript übergeben haben, dem Server hinzugefügt wurde.

Prüfen Sie den hinzugefügten Schlüssel

Fazit

In diesem Artikel haben wir das Skript zur Automatisierung des Prozesses der Erstellung eines Benutzers auf der Ubuntu EC2-Instanz und des Hinzufügens eines öffentlichen Schlüssels zu diesem Benutzer gesehen.

Diese Automatisierung kann dazu beitragen, den Aufwand für das manuelle Anlegen von Benutzern und das Hinzufügen von öffentlichen Schlüsseln zu ihnen zu minimieren.

Das könnte dich auch interessieren …