Linux ssh 로 다중명령 실행하기

# 우선 kerberos 환경 구성이 되어 있어야 한다.
# kerberos 서버 설정
vi /etc/krb5.conf
[libdefaults]
default_realm = ysoftman.com
[realms]
ysoftman.com = {
  kdc = kauth.ysoftman.com
  admin_server = kadmin.ysoftman.com
  kpasswd_server = kadmin.ysoftman.com
}

# 만약 다음과 같은 에러가 발생한다면
kinit : Cannot contact any KDC for realm 'ysoftman.com' ...

# 각 서버의 디폴트 포트는 다음과 같고 포트까지 명시해보자
kdc = kauth.ysoftman.com:88
admin_server = kadmin.ysoftman.com:749
kpasswd_server = kadmin.ysoftman.com:464 # on UDP


# 디폴트 경로 대신 환경변수로 krb5.conf 경로를 변경할 수도 있다.
KRB5_CONFIG="${HOME}/krb5.conf"

# ssh 기본 설정
vi /etc/ssh/ssh_config
Host *
HashKnownHosts yes # ~/.ssh/known_hosts 에 접속한 호스트들 hash로 기록
GSSAPIAuthentication yes # GSSAPI 인증  사용

# 이제 ssh 접속이 암호를 물어보는 과정을 스킵하기 위해
# 다음과 같이 해당 아이디에 암호를 입력하고 티켓을 획득한다.
kinit ysoftman

# 티켓 획득 후 티켓 정보 확인
klist

# ssh 로 다중 명령을 실행하려면 "" 사이에 명령을 ; 으로 구분하여 사용한다.
# 형식은 다음과 같다.
ssh -l ysoftman servername "command1; command2; command3;"

# 예를 들어 /home1 로 이동해서 현재 디렉토리를 파악하고 파일 리스트 출력하려면
ssh -l ysoftman servername "cd /home1/; pwd; ls -ahl;"


#####


# tar 로 압축한 파일 ssh 로 전송하기
tar cvzf - ./testdir | ssh ysoftman@ysoftman.server.test "dd of=/home/ysoftman/ysoftman.tar.gz"


#####


# 테스트를 위한 임시 서버 리스트 파일 생성
echo 'server-lemon
server-apple
server-orange' > temp_server_list.txt

# 여러 호스트에 ssh 명령 실행
# stdin(< temp_server_list.txt) 파이프라인을 사용중 ssh 로 원격 명령실
while read server
do
    echo ${server}
    # stdin("hostname" 명령) 을 사용하면 기존 stdin(< temp_server_list.txt)이 끝나게 되어 루프가 끝나게 된다.
    # < /dev/null 로 stdin 을 사용하지 않도록 한다.
    # -o "StrictHostKeyChecking no" 접속시 호스트 체크 안하기
    out=`ssh -o "StrictHostKeyChecking no" ysoftman@server "hostname" < /dev/null`
    echo ${out}
done < temp_server_list.txt


comments:

댓글 쓰기