[Linux 셸 스크립트] 네트워크 - 067 로컬 셸 스크립트 파일을 원격 호스트에서 그대로 실행하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 네트워크 - 067 로컬 셸 스크립트 파일을 원격 호스트에서 그대로 실행하기

by 찬찬이 아빠 2021. 4. 7.
반응형
  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 매뉴얼을 참조하기 바랍니다.

 

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글