GNU/Linux >> Tutoriales Linux >  >> Linux

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

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

Requisitos previos

  1. Comprensión básica de Shell Scripts.
  2. Cuenta de AWS (cree si no tiene una).
  3. Instancia EC2 con el usuario que tiene acceso sudo (haga clic aquí para aprender a crear una instancia EC2 si no tiene una o si desea aprender)

Que haremos

  1. Cree una secuencia de comandos y un par de claves públicas y privadas.
  2. Cree un usuario usando el script.

Crear una secuencia de comandos y un par de claves pública-privada

Cree un script con el siguiente código en él. Puede encontrar el mismo código en mi repositorio 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

Cree un par de claves para que se cree el usuario. Aquí, almacenaré estas claves en /tmp/

ssh-keygen

ls /tmp/id_rsa*

Crea un usuario usando el script

Ahora, vamos a crear un usuario con el siguiente comando. Debe cambiar los valores en el script con el válido para usted. Ejecute el siguiente comando desde su 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 iniciar sesión en la instancia EC2.
  • -K =~/Downloads/howtoforge-test.pem = Ureate para iniciar sesión en 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 para usted. Agregue valores válidos para usted.

Puede ver que el usuario ha sido creado.

Ahora, puede iniciar sesión en la instancia EC2 para comprobar si el usuario se ha creado o no.

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

Ahora puede intentar iniciar sesión en el servidor usando el usuario, es decir, rahul, que acabamos de crear.

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

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

En la captura de pantalla anterior, puede ver que pudimos iniciar sesión en el servidor con el usuario que creamos.

Además, verifique la clave que agregamos al usuario. Verá que la clave pública que le pasamos al script se agregó al servidor.

Conclusión

En este artículo, vimos el script para automatizar el proceso de creación de un usuario en la instancia EC2 de Ubuntu y agregarle una clave pública.

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


Linux
  1. Cómo comparar números y cadenas en Linux Shell Script

  2. Cómo crear y eliminar un grupo de usuarios en Linux

  3. Cómo crear un usuario de Linux usando Ansible

  4. Cómo crear (y publicar) una clave PGP en Linux usando una GUI

  5. Cómo verificar si existe un grupo y agregarlo si no existe en Linux Shell Script

Cómo agregar y eliminar Cronjobs de instancias EC2 de Linux en AWS mediante scripts de shell

Cómo crear una instancia Amazon AWS EC2 usando Python Boto3

Cómo configurar la clave pública y privada SSH en Linux

Cómo crear y ejecutar un script de shell en Ubuntu 22.04

Cómo crear/agregar usuarios en Linux

Cómo agregar o crear un usuario sudo en el sistema Linux [inicio rápido]