maak je een gebruiker aan op Linux EC2 instance op AWS en voeg er een publieke sleutel aan toe met een shell script

Een gebruiker aanmaken en er een publieke sleutel aan toevoegen kan erg vervelend zijn. In dit artikel zullen we zien hoe dit proces geautomatiseerd kan worden met een shell script dat ons kan helpen menselijke fouten te vermijden die kunnen ontstaan als we de taak handmatig doen.

Vereisten

  1. Basiskennis van Shell Scripts.
  2. AWS Account(aanmaken als je dat nog niet hebt).
  3. EC2 Instance met de gebruiker die sudo toegang heeft(Klik hier om te leren een EC2 instance te maken als je er geen hebt of als je het wilt leren )

Wat zullen we doen

  1. Maak een script en een privaat-publiek sleutelpaar.
  2. Maak een gebruiker met behulp van het script.

Maak een script en een privaat-publiek sleutelpaar

Maak een script met de volgende code erin. Je kunt dezelfde code vinden op mijn Github repo op de volgende 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

Maak een sleutel-paar voor de aan te maken gebruiker. Hier sla ik deze sleutels op in /tmp/

ssh-keygen

Maak een sleutel-paar

ls /tmp/id_rsa*

Maak een lijst van de sleutels die we gemaakt hebben

Maak een gebruiker met het script

Laten we nu een gebruiker aanmaken met het volgende commando. Je moet de waarden op het script veranderen met de waarden die voor jou geldig zijn. Voer het volgende commando uit vanaf je lokale linux systeem.

Verander, voordat je het script uitvoert, de permissies

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 = Gebruiker met sudo toegang om in te loggen op de EC2 instantie.
  • -K =~/Downloads/howtoforge-test.pem = Ureate om in te loggen op de EC2 instantie.
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com = IP van de EC2 instantie.
  • -u = rahul = Gebruiker die aangemaakt moet worden
  • -k = Openbare sleutel van de aan te maken gebruiker.

Deze waarden zijn voor jou verschillend. Voeg waarden toe die voor jou geldig zijn.

Maak een gebruiker

Je ziet dat de gebruiker is aangemaakt.

Nu kun je inloggen op de EC2 instance om te controleren of de gebruiker is aangemaakt of niet.

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

Controleer of de gebruiker is aangemaakt

Je kunt nu proberen op de server in te loggen met de gebruiker, i.e. rahul, die we zojuist gemaakt hebben.

Verander eerst de machtigingen van de private sleutel die gebruikt moet worden om naar de server te authenticeren.

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

Probeer in te loggen

In de bovenstaande schermafbeelding zie je dat we konden inloggen op de server met de gebruiker die we maakten.

Bekijk ook de sleutel die we aan de gebruiker toevoegden. Je ziet dat de publieke sleutel die we aan het script doorgaven ook aan de server werd toegevoegd.

Bekijk de sleutel die we toevoegden

Conclusie

In dit artikel zagen we het script om het proces te automatiseren van het aanmaken van een gebruiker op de Ubuntu EC2 instance en er een publieke sleutel aan toe te voegen.

Deze automatisering kan helpen om de inspanning te minimaliseren die nodig is om handmatig gebruikers aan te maken en er publieke sleutels aan toe te voegen.