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
- Comprensión básica de Shell Scripts.
- Cuenta AWS (Crear si no tienes uno).
- 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)
¿Qué haremos?
- Cree un script y un par de claves públicas y privadas.
- Cree un usuario usando el script.
Cree un script y un par de claves público-privado
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
función de ayuda() { 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" ] luego imprima "\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
Create a key-pair for the user to be created. Here, I ll store these keys in /tmp/
ssh-keygen
ls /tmp/id_rsa*
Create a user using the script
Now, let’s create a user with the following command. You need to change values on the script with the one valid for you. Execute the following command from your local linux system.
Before you execute the script, changes its 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]"
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. Añade valores válidos para ti.
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 utilizando 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 utilizando el usuario que creamos.
Además, verifique la clave que agregamos al usuario. Encontrará que la clave pública que pasamos al script se agregó al servidor.
Conclusión
En este artículo, vimos el script para automatizar el proceso de crear un usuario en la instancia de Ubuntu EC2 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.