한줄 명령 실행
$ ssh User@HostName "cmd1; cmd2"
local의 script에서 실행
#!/bin/bash
ret=$(ssh User@HostName "cmd1; cmd2")
- PREFIX 지정해 명령어 전송
#!/bin/bash
PREFIX="ssh -p PORT User@HostName"
${PREFIX} "cmd1; cmd2"
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"
방법 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 ====
SERVERS="myserver1 myserver2"
for m in $SERVERS; do
ssh ${m} sh < test.sh > ${m}.log &
done
- 각 ssh 명령이 fork되어 백그라운드로 돌고 각 서버에 대한 결과는
${m}.log
로 파일 확인