ssh 원격 명령 실행

markyang92·2021년 6월 18일
0

shell-script

목록 보기
14/19
post-thumbnail

한줄 명령 실행

$ ssh User@HostName "cmd1; cmd2"

local의 script에서 실행

#!/bin/bash
ret=$(ssh User@HostName "cmd1; cmd2")

  1. PREFIX 지정해 명령어 전송
#!/bin/bash

PREFIX="ssh -p PORT User@HostName"

${PREFIX} "cmd1; cmd2"

# 주의! ${PREFIX}에 Quotes " " 를 붙이지 말 것!


function 이용

방법 1.

  • local script에서 한줄 한줄 $(ssh User@HostName "cmd1; cmd2")를 사용하기 힘들다.
  • 함수를 이용해 이를 해결하자!
#!/bin/bash

SSH_CMD="ssh User@HostName \""
SUFFIX="\""
function ECHO_CMD () { eval "${SSH_CMD} echo $@ ${SUFFIX}"; }

ECHO_CMD "Hello World"

# -> eval "ssh User@HostName \"echo Hello World\""
# -> = $ ssh User@HostName "echo Hello World" = $ ssh User@HostNAme "cmd1"

방법 2.

DST_LIST+=("User1","HostName1","SSH_Port1")
DST_LIST+=("User2","HostName2","SSH_Port2")

function passCMD_eachServer() {
    ssh -p $3 $1@$2 "$4"
}

function passCMD () {
    CMD="$@"
    for i in ${DST_LIST[@]}; do
        passCMD_eachServer $(echo $i | tr ',' ' ') "${CMD}"
    done
}

passCMD echo HelloWorld!

별도의 쉘 스크립트

원격에 스크립트파일을 전송

  • 별도의 쉘 스크립트를 만들어 두고 원격에 스크립트 해석기를 실행시키고 파이프나 리다이렉션으로 보내는 방법
(local) $ ssh User@HostName bash < test.sh
  • Host의 bash(스크립트 해석기) local의 test.sh를 전달해 실행 시킴

원격에 여러개 보내기

==== remote.sh ====
#!/bin/bash
SERVERS="myserver1 myserver2"

for m in $SERVERS; do
    ssh ${m} sh < test.sh > ${m}.log &
done
  • ssh 명령이 fork되어 백그라운드로 돌고 각 서버에 대한 결과는 ${m}.log로 파일 확인
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글