Поиск по сайту:

Как создать пользователя в экземпляре Linux EC2 на AWS и добавить к нему открытый ключ с помощью сценария оболочки


На этой странице

  1. Предварительные условия
  2. Что мы будем делать
  3. Создайте скрипт и пару открытый-закрытый ключ.
  4. Создайте пользователя с помощью скрипта
  5. Заключение

Создание пользователя и добавление к нему открытого ключа может быть очень утомительным. В этой статье мы увидим, как этот процесс можно автоматизировать с помощью сценария оболочки, который может помочь нам избежать человеческих ошибок, которые могут возникнуть, если мы выполним задачу вручную.

Предпосылки

  1. Основное понимание сценариев оболочки.
  2. Аккаунт AWS (создайте, если у вас его нет).
  3. Экземпляр EC2 с пользователем, имеющим доступ к sudo (нажмите здесь, чтобы узнать, как создать экземпляр EC2, если у вас его нет или если вы хотите научиться этому)

Что мы будем делать

  1. Создайте скрипт и пару закрытый/открытый ключ.
  2. Создайте пользователя с помощью скрипта.

Создайте скрипт и пару закрытый-открытый ключ

Создайте скрипт со следующим кодом. Вы можете найти тот же код в моем репозитории Github по следующей ссылке.

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

Создайте пару ключей для создаваемого пользователя. Здесь я буду хранить эти ключи в /tmp/

ssh-keygen
ls /tmp/id_rsa*

Создайте пользователя с помощью скрипта

Теперь давайте создадим пользователя с помощью следующей команды. Вам нужно изменить значения в скрипте на допустимое для вас. Выполните следующую команду из вашей локальной системы Linux.

Перед выполнением скрипт меняет свои разрешения

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 "

Здесь,

  • -U=ubuntu=пользователь с доступом sudo для входа в экземпляр EC2.
  • -K =~/Downloads/howtoforge-test.pem = Выполните вход в экземпляр EC2.
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com = IP-адрес экземпляра EC2.
  • -u=rahul=Пользователь, который будет создан
  • -k=Открытый ключ создаваемого пользователя.

Эти значения будут различаться для вас. Добавьте действительные для вас значения.

Вы видите, что пользователь создан.

Теперь вы можете войти в экземпляр EC2, чтобы проверить, был ли создан пользователь.

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

Теперь вы можете попытаться войти на сервер, используя только что созданного пользователя, то есть rahul.

Перед этим измените разрешения закрытого ключа, который будет использоваться для аутентификации на сервере.

chmod 400 /tmp/id_rsa.pub
ssh -i /tmp/id_rsa.pub 

На приведенном выше снимке экрана видно, что мы смогли войти на сервер, используя созданного нами пользователя.

Также проверьте ключ, который мы добавили пользователю. Вы обнаружите, что открытый ключ, который мы передали сценарию, был добавлен на сервер.

Заключение

В этой статье мы увидели сценарий для автоматизации процесса создания пользователя в экземпляре Ubuntu EC2 и добавления к нему открытого ключа.

Эта автоматизация может помочь свести к минимуму усилия, необходимые для создания пользователей вручную и добавления к ним открытых ключей.