Comment créer un utilisateur sur une instance EC2 Linux sur AWS et lui ajouter une clé publique à l’aide d’un script shell

Créer un utilisateur et lui ajouter une clé publique peut être très fastidieux. Dans cet article, nous allons voir comment ce processus peut être automatisé à l’aide d’un script shell, ce qui peut nous aider à éviter les erreurs humaines qui peuvent survenir si nous effectuons la tâche manuellement.

Pré-requis

  1. Compréhension de base des scripts shell.
  2. Compte AWS (à créer si tu n’en as pas).
  3. Instance EC2 avec l’utilisateur ayant un accès sudo(clique ici pour apprendre à créer une instance EC2 si tu n’en as pas ou si tu veux apprendre).

Ce que nous allons faire

  1. Crée un script et une paire de clés privée-publique.
  2. Crée un utilisateur à l’aide du script.

Créer un script et une paire de clés privées-publiques

Crée un script contenant le code suivant. Tu peux trouver le même code sur mon repo Github au lien suivant.

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

Crée une paire de clés pour l’utilisateur à créer. Ici, je vais stocker ces clés dans /tmp/

ssh-keygen

Crée une paire de clés

ls /tmp/id_rsa*

Liste les clés que nous avons créées

Créer un utilisateur à l’aide du script

Maintenant, créons un utilisateur à l’aide de la commande suivante. Tu dois changer les valeurs du script avec celles qui sont valables pour toi. Exécute la commande suivante depuis ton système linux local.

Avant d’exécuter le script, modifie ses permissions

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

Ici,

  • -U = ubuntu = Utilisateur ayant un accès sudo pour se connecter à l’instance EC2.
  • -K =~/Downloads/howtoforge-test.pem = Ureate pour se connecter à l’instance EC2.
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com = IP de l’instance EC2.
  • -u = rahul = Utilisateur à créer
  • -k = Clé publique de l’utilisateur à créer.

Ces valeurs varieront pour toi. Ajoute des valeurs valables pour toi.

Créer un utilisateur

Tu peux voir que l’utilisateur a été créé.

Tu peux maintenant te connecter à l’instance EC2 pour vérifier si l’utilisateur a été créé ou non.

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

Vérifie si l'utilisateur est créé

Tu peux maintenant essayer de te connecter au serveur en utilisant l’utilisateur, c’est-à-dire rahul, que nous venons de créer.

Avant cela, modifie les autorisations de la clé privée à utiliser pour s’authentifier sur le serveur.

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

Essaie de te connecter

Dans la capture d’écran ci-dessus, tu peux voir que nous avons pu nous connecter au serveur en utilisant l’utilisateur que nous avons créé.

Vérifie aussi la clé que nous avons ajoutée à l’utilisateur. Tu trouveras que la clé publique que nous avons transmise au script a été ajoutée au serveur.

Vérifie la clé que nous avons ajoutée

Conclusion

Dans cet article, nous avons vu le script permettant d’automatiser le processus de création d’un utilisateur sur l’instance Ubuntu EC2 et d’y ajouter une clé publique.

Cette automatisation peut aider à minimiser l’effort nécessaire pour créer des utilisateurs manuellement et leur ajouter des clés publiques.

Vous aimerez aussi...