Cómo crear un usuario en una instancia EC2 de Linux en AWS y añadirle una clave pública mediante un script de shell

Crear un usuario y añadirle una clave pública puede ser muy tedioso. En este artículo, veremos cómo se puede automatizar este proceso utilizando un script de shell que nos ayude a evitar los errores humanos que pueden surgir si hacemos la tarea manualmente.

Requisitos previos

  1. Conocimiento básico de los Shell Scripts.
  2. Cuenta de AWS(crearla si no la tienes).
  3. Instancia EC2 con el usuario con acceso sudo (Haz clic aquí para aprender a crear una instancia EC2 si no tienes una o si quieres aprender )

Qué haremos

  1. Crear un script y un par de claves privadas-públicas.
  2. Crear un usuario con el script.

Crear un script y un par de claves privadas-públicas

Crea un script con el siguiente código. Puedes encontrar el mismo código en mi repo de Github en el siguiente enlace.

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

Crea un par de claves para el usuario que se va a crear. Aquí, almacenaré estas claves en /tmp/

ssh-keygen

Crea un par de claves

ls /tmp/id_rsa*

Enumerar las claves que hemos creado

Crea un usuario con el script

Ahora, vamos a crear un usuario con el siguiente comando. Tienes que cambiar los valores del script por los que sean válidos para ti. Ejecuta el siguiente comando desde tu sistema linux local.

Antes de ejecutar el script, cambia sus permisos

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

Aquí,

  • -U = ubuntu = Usuario con acceso sudo para entrar en la instancia EC2.
  • -K =~/Downloads/howtoforge-test.pem = Ureate para acceder a la instancia EC2.
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com = IP de la instancia EC2.
  • -u = rahul = Usuario a crear
  • -k = Clave pública del usuario a crear.

Estos valores variarán en función de ti. Añade los valores válidos para ti.

Crear un usuario

Puedes ver que el usuario ha sido creado.

Ahora puedes entrar en la instancia de EC2 para comprobar si el usuario se ha creado o no.

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

Comprueba si el usuario está creado

Ahora puedes intentar entrar en el servidor utilizando el usuario, es decir, rahul, que acabamos de crear.

Antes de eso, cambia los permisos de la clave privada que se utilizará para autenticarse en el servidor.

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

Intenta iniciar sesión

En la captura de pantalla anterior, puedes ver que hemos podido iniciar sesión en el servidor utilizando el usuario que hemos creado.

Además, comprueba la clave que hemos añadido al usuario. Verás que la clave pública que pasamos al script se añadió al servidor.

Comprueba la clave que hemos añadido

Conclusión

En este artículo, hemos visto el script para automatizar el proceso de crear un usuario en la instancia EC2 de Ubuntu y añadirle una clave pública.

Esta automatización puede ayudar a minimizar el esfuerzo necesario para crear usuarios manualmente y añadirles claves públicas.

También te podría gustar...