1.여러 대의 시스템에 동일한 사용자를 생성하도록 소스 변경을 하세요.
server=(192.168.111.139 192.168.111.140 192.168.111.141)
for (( k=0; k<${#server[@]}; k++ ))
do
echo ${server[$i]}
dup=$(ssh root@${server[$k]} "cat /etc/passwd | grep ${i} | wc -l")
if [[ ${dup} == 0 ]]
then
echo "검증성공 유저 아이디 생성중.."
ssh root@${server[$k]} "useradd $i"
ssh root@${server[$k]} "echo $j | passwd $i --stdin"
echo "*************************************"
echo "*********유저아이디 생성완료*********"
echo "*************************************"
20~32행 : 생성할 서버 ip를 배열변수로 선언후 for문을 사용하여 각 서버마다 ssh root로 접속하여 사용자를 생성한다.
서버 ip는 매번 입력받지 않고 스크립트에서 지정 해 놓는다.
2. 사용자 계정과 패스워드를 입력하지 않았을 경우 에러 메시지와 함께 사용법을 안내하세요.
3 i=$1
4 j=$2
5 sshKey="$HOME/.ssh/key.pem"
6 sshPub="$HOME/.ssh/key.pem.pub"
7
8 if [[ -z $i ]] || [[ -z $j ]]
9 then
10 echo "1.사용자계정과 패스워드를 입력해 주세요."
11 echo "Usage: #>sh multadduser.sh stack stackpw"
12 exit
13 fi
3,4행 : 아이디와 pw를 파라미터값으로 선언
8~13행 : 파라미터값을 하나라도 입력하지 않으면 에러메시지를 출력하고 스크립트를 종료한다.
3.이미 사용자가 존재하는지 여부를 점검하도록 소스 변경하세요.
24 dup=$(ssh root@${server[$k]} "cat /etc/passwd | grep ${i} | wc -l")
25 if [[ ${dup} == 0 ]]
26 then
27 echo "검증성공 유저 아이디 생성중.."
24행 : 각 서버에서 사용자 계정이 존재하는지 확인해야 되기 때문에 ssh root@xxx.xxx.xxx.xxx로 명령어를 실행한다.
wc -l 한값을 dup라는 변수에 저장후 그값이 0이면 중복된값이 없기에 유저아이디를 생성시작한다.
4.패스워드 대신 ssh 공개키를 사용하여 ssh 원격 접속하도록 소스 변경하세요.
5 sshKey="$HOME/.ssh/key.pem"
6 sshPub="$HOME/.ssh/key.pem.pub"
15 ssh-keygen -q -N "" -f ~/.ssh/id_rsa
16 cp $sshKey $HOME/.ssh/id_rsa
33 echo "키복사중"
34 sshpass -p "$j" ssh-copy-id -i $sshpub $i@${server[$k]}
35 echo "키 복사 완료"
5,6행 : 접속할 서버 정보, ssh키,공개키 경로를 변수에 저장
15,16행 : ssh key를 생성하고 개인키 파일을 id_rsa경로로 인식하기에 복사해준다.
34행 : sshpass 명령어를 사용하여 공개키를 해당서버에 복사한다.
5.기타 추가적인 보완을 통하여 스크립트의 완성도를 향상시켜보세요.
10 echo "1.사용자계정과 패스워드를 입력해 주세요."
27 echo "검증성공 유저 아이디 생성중.."
30 echo "*************************************"
31 echo "*********유저아이디 생성완료*********"
32 echo "*************************************"
33 echo "키복사중"
35 echo "키 복사 완료"
36 else
37 echo "유저아이디가 중복입니다 프로그램종료.."
38 exit
각 명령문 실행마다 오류가 발생한다면 어디서 발생하였고 어디까지 진행되었는지 확인 할 수 없기때문에
echo 출력문을 사용하여 어디까지 진행되었는지 표기해준다.
■ 실행결과
■ ssh 접속 결과
6.A가만든 아킬라 서버 root 접속을 위한 개인키를 B가 복사하여 사용하면 아킬라 서버에 root 접속이 되는가 안되는가
공개키는 아킬라 서버에 있기때문에 A가 가지고 있는 root접속을 위한 개인키를 그대로 해커가 복사하여 갖고있다면 개인키와 공개키에 대한 비대칭 암호화 방법으로 접속이 가능하다.
7.만약 해커가 복사한 개인키로 아킬라 서버 root접속을 하지못하게 취할 수 있는 보안 대책 ㄱ) ssh 명령어 옵션을 확인 ㄴ) 방화벽에 의한 접속 가능 ip와 포트번호 설정과는 별도로 서버 자체에서 tcp_wrapper 를 사용한 보안 대책에 대하여 확인해보세요.
기본포트번호가 아니라 포트번호를 수정하거나 config파일에서 root접속을 막는 방법도 있다.
ㄱ)
ㄴ)
접근제어 방법으로 tcp_wrapper를 이용하여 특정 아이피 또는 대역에 대해 접근제어를 허가,거부 하여 보안을 강화 할 수 있다.
'22년 가을학기 > 유닉스 고급' 카테고리의 다른 글
9.사용자 관리 쉘스크립트 (0) | 2022.11.27 |
---|---|
8.시스템 관리 쉘스크립트 (0) | 2022.11.16 |
6.쉘스크립트 중급 (0) | 2022.11.05 |
5.파일 처리 명령어 (0) | 2022.10.13 |
4.문자열 검색 명령어 (0) | 2022.09.29 |