[Linux] ssh로 원격 명령 실행
포스트
취소

[Linux] ssh로 원격 명령 실행

ssh로 원격으로 명령어 실행하는 방법

기본 방법

ssh 명령어의 manpage에서, 아래와 같은 Synopsis를 확인할 수 있다.

1
2
3
4
5
6
7
ssh [-afgknqstvxACNTX1246] [-b bind_address] [-m mac_spec] 
    [-c cipher_spec] [-e escape_char] [-i identity_file] 
    [-i PKCS#11-URI]
    [-l login_name] [-F configfile] [-o option] [-p port] 
    [-L [bind_address:]port:host:hostport]
    [-R [bind_address:]port:host:hostport]
    [-D [bind_address:]port] hostname | user@hostname [command]

여기서 맨 윗 줄과 아랫 줄만 빼서 보면 아래와 같이 줄일 수 있다.

1
ssh [user@hostname] [command]

즉, 아래와 같은 명령어를 사용하면

1
ssh root@192.168.2.100 ls -al

192.168.2.100 원격지에서, root 계정의 홈 디렉토리에서, ls -al 명령어를 수행한 결과를 현재의 터미널에 출력해준다.

한 줄로 여러 개 명령어 원격 실행

1
ssh [user@hostname] "command_1;command_2;"

명령어를 따옴표로 묶고, 각각의 명령어를 세미콜론(;)으로 구분지어주면 된다.

예시

1
ssh user@server_ip "ls -a; df"

server_ip 원격지에서, user 계정의 홈 디렉토리에서, ls -al 명령어를 수행한 결과와 df 명령어를 수행한 결과를 현재의 터미널에 출력해준다.

스크립트로 실행하는 방법

별도의 쉘스크립트를 만들고 원격에 스크립트 해석기를 실행시키고 파이프나 리다이렉션으로 보내는 방법

1
2
3
4
5
6
7
8
9
#!/bin/bash
ls -al
df

# 파이프로 보내기
cat test_script.sh | ssh myserver sh

# 리다이렉션으로 보내기
ssh user@server_ip sh < test_script.sh

여러 서버에 루프를 돌면서 지정한 스크립트를 실행하는 스크립트

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
SERVERS="
hostname1
hostname2
"
for s in $SERVERS
do
    ssh $s sh < test_script.sh               # 순차적으로 실행
    # ssh $s sh < test_script.sh > $m.log &  # 백그라운드에서 실행
done

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[Linux] bash 쉘 스크립트 함수 반환 값(리턴) 받기

[Linux] bash 쉘 스크립트 함수 사용법