1. 사용 명령어 |
(1) cat
(2) ssh
(3) hostname
(4) ping
2. 키워드 & 사용처 |
(1) 키워드
SSH, 원격 호스트
(2) 사용처
로컬에 있는 셸 스크립트를 접속한 곳에 복사하지 않고 ssh로 실행하고 싶을 때 사용합니다.
3. 실행 예제 |
$ ./script-remote.sh
server04
Ping to 192.168.2.35 : [OK]
server05
Ping to 192.168.2.35 : [NG]
server06
Ping to 192.168.2.35 : [OK]
4. 스크립트 |
<script-remote.sh 스크립트>
#!/bin/sh
username="park"
script="check.sh"
cat $script | ssh ${username}@192.168.2.4 "sh" ①
cat $script | ssh ${username}@192.168.2.5 "sh" ①
cat $script | ssh ${username}@192.168.2.6 "sh" ①
<check.sh 스크립트>
#!/bin/sh
# 개통 확인할 대상 서버
checkserver="192.168.2.35"
# 스크립트를 실행한 호스트명 표시
hostname ②
# 서버 개통을 ping 명령어로 확인
ping -c 1 "$checkserver" > /dev/null 2>&1 ③
if [ $? -eq 0 ]; then ④
echo "Ping to $checkserver : [OK]" ④
else ④
echo "Ping to $checkserver : [NG]" ④
fi
5. 해설 |
이 스크립트는 여러 서버를 순차적으로 로그인해서 특정 서버(스크립트 2의 셸 변수 checkserver로 정의한 192.168.2.35)와 통신이 정상적인지 확인합니다.
script-remote.sh 스크립트를 실행해서 로컬에 있는 확인용 스크립트 파일(check.sh)을 ssh 로그인한 서버에서 직접 실행시키는 것이 포인트입니다. 이런 스크립트 사용법은 이런 경우에 활용 가능합니다.
- 여러 서버에서 설정 내용이 같은지 확인하는 명령어 실행
- 네트워크 설정이 전부 같은지 설정 파일 확인
①은 로컬에 설치된 셸 스크립트 파일을 ssh 접속한 서버에서 직접 실행하는 부분입니다. 여기에서는 3개 서버를 server04(192.168.2.4), server05(192.168.2.5), server06(192.168.2.6) 순서대로 실행합니다.
ssh 명령어는 [사용자명@서버명] 뒤에 인수를 주면 원격 서버에서 실행할 명령어를 지정할 수 있습니다. ①에서는 "sh"를 지정해서 비 인터랙티브 셸을 실행합니다. 이때 표준 입력은 터미널이 할당되지 않으므로 cat 명령어로 로컬 스크립트를 표준 입력에 할당하면 셸 스크립트를 실행할 수 있습니다.
원격 서버에서 실제로 실행하는 셸 스크립트가 check.sh입니다. 우선 ②에서 hostname 명령어를 실행해서 동작하는 원격 서버의 호스트명을 표시합니다. 그후 ③에서 셸 변수 checkserver로 지정한 곳에 ping 명령어를 실행해서 개통을 확인합니다. ④에서 종료 스테이터스 $?가 0인지 확인해서 성공인지 실패인지 판단해 ping 명령어가 성공했으면 [OK], 실패했으면 [NG]를 표시합니다.
이렇게 파일을 복사하지 않고도 원격으로 셸 스크립트 파일을 실행할 수 있습니다. 여러 서버에 같은 셸 스크립트를 실행하고 싶을 때 편리합니다.
<비 인터랙티브 셸과 인터랙티브 셸>
앞서 '원격 서버에서 sh르르 비 인터랙티브 셸로 실행합니다'라고 설명했는데 조금 보충하겠습니다.
비 인터랙티브 셸은 인터랙티브(대화형)가 아닌 셸입니다. 즉 입력을 위한 키보드나 표시를 위한 터미널이 접속되지 않은 셸입니다. 예를 들어 셸 스크립트를 실행하기 위해 실행되는 셸이 있습니다. 터미널에서 ./script.sh 같은 명령어를 실행하면 비 인터랙티브 셸이 실행되어 셸 스크립트를 실행하게 됩니다.
사용자가 키보드로 조작하는 셸은 인터랙티브 셸입니다. 즉, 입출력을 위해 키보드와 터미널이 접속되어서 셸에서 실행할 처리를 키보드로 직접 입력받습니다.
비 인터랙티브 셸과 인터랙티브 셸은 실행 시 읽어들이는 설정 파일이 조금 다릅니다. 이런 차이는 sh나 bash 매뉴얼을 참조하기 바랍니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 텍스트 처리 - 069 텍스트 파일에서 구분자를 지정해서 컬럼 추출하기 (0) | 2021.04.07 |
---|---|
[Linux 셸 스크립트] 텍스트 처리 - 068 ID가 적힌 목록 파일에서 ID를 추출할 때 ID 끝 문자로 정렬하기 (0) | 2021.04.07 |
[Linux 셸 스크립트] 네트워크 - 066 IP 주소에 따른 처리 분기를 case문으로 작성하기 (0) | 2021.04.07 |
[Linux 셸 스크립트] 네트워크 - 065 지정한 크기의 파일을 만들어서 전송 속도를 측정하기 (0) | 2021.04.07 |
[Linux 셸 스크립트] 네트워크 - 064 셸 스크립트로 CGI 실행하기 (0) | 2021.04.06 |
댓글