AWS의 Linux EC2 인스턴스에서 사용자를 생성하고 쉘 스크립트를 사용하여 공개 키를 추가하는 방법
이 페이지에서
- 전제 조건
- 무엇을 할 것인가\n
- 스크립트 및 비공개-공개 키 쌍 만들기
- 스크립트를 사용하여 사용자 만들기\n
- 결론
사용자를 생성하고 여기에 공개 키를 추가하는 것은 매우 지루할 수 있습니다. 이 문서에서는 작업을 수동으로 수행할 때 발생할 수 있는 인적 오류를 방지하는 데 도움이 되는 셸 스크립트를 사용하여 이 프로세스를 자동화하는 방법을 살펴봅니다.
전제 조건
- 쉘 스크립트에 대한 기본적인 이해.\n
- AWS 계정(계정이 없는 경우 생성).
- 사용자가 sudo 액세스 권한이 있는 EC2 인스턴스(EC2 인스턴스가 없거나 배우고 싶은 경우 여기를 클릭하여 EC2 인스턴스를 만드는 방법을 알아보세요.)\n
우리는 무엇을 할 것인가
- 스크립트와 비공개-공개 키 쌍을 만듭니다.
- 스크립트를 사용하여 사용자를 만듭니다.\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 인스턴스에서 사용자를 생성하고 공개 키를 추가하는 프로세스를 자동화하는 스크립트를 보았습니다.
이 자동화는 사용자를 수동으로 만들고 공개 키를 추가하는 데 필요한 노력을 최소화하는 데 도움이 될 수 있습니다.