웹사이트 검색

AWS의 Linux EC2 인스턴스에서 사용자를 생성하고 쉘 스크립트를 사용하여 공개 키를 추가하는 방법


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가\n
  3. 스크립트 및 비공개-공개 키 쌍 만들기
  4. 스크립트를 사용하여 사용자 만들기\n
  5. 결론

사용자를 생성하고 여기에 공개 키를 추가하는 것은 매우 지루할 수 있습니다. 이 문서에서는 작업을 수동으로 수행할 때 발생할 수 있는 인적 오류를 방지하는 데 도움이 되는 셸 스크립트를 사용하여 이 프로세스를 자동화하는 방법을 살펴봅니다.

전제 조건

  1. 쉘 스크립트에 대한 기본적인 이해.\n
  2. AWS 계정(계정이 없는 경우 생성).
  3. 사용자가 sudo 액세스 권한이 있는 EC2 인스턴스(EC2 인스턴스가 없거나 배우고 싶은 경우 여기를 클릭하여 EC2 인스턴스를 만드는 방법을 알아보세요.)\n

우리는 무엇을 할 것인가

  1. 스크립트와 비공개-공개 키 쌍을 만듭니다.
  2. 스크립트를 사용하여 사용자를 만듭니다.\n

스크립트 및 비공개-공개 키 쌍 만들기

다음 코드가 포함된 스크립트를 생성합니다. 다음 링크의 내 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 = EC2 인스턴스에 로그인할 수 있는 sudo 액세스 권한이 있는 사용자.\n
  • -K =~/Downloads/howtoforge-test.pem = EC2 인스턴스에 로그인하려면 Ureate하십시오.\n
  • -I =ec2-15-236-64-128.eu-west-3.compute.amazonaws.com=EC2 인스턴스의 IP.
  • -u = rahul = 생성할 사용자\n
  • -k = 생성할 사용자의 공개 키.\n

이 값은 사용자에 따라 다릅니다. 유효한 값을 추가하십시오.

사용자가 생성된 것을 확인할 수 있습니다.

이제 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 인스턴스에서 사용자를 생성하고 공개 키를 추가하는 프로세스를 자동화하는 스크립트를 보았습니다.

이 자동화는 사용자를 수동으로 만들고 공개 키를 추가하는 데 필요한 노력을 최소화하는 데 도움이 될 수 있습니다.