ssh remote execute

기능 수정 후 실서버의 데이터로 테스트 하기 위해 데이터를 덤프 받아 개발서버로 넣곤 하는데
덤프 받고 압축하고 전송하고 삭제 하고 개발서버에서 압축풀고 인서트 하고 삭제하고 하는게 너무 번거로워서
쉘스크립트를 작성했다.

#!/bin/sh
echo "dump db datas..."
mysqldump -u****** -p******* ****** > ./temp.sql
echo "dump end"
echo "compressing dump file"
gzip -9 temp.sql
echo "compressed"
echo "start transfer dump file"
scp ./temp.sql.gz *****@*******:/home/*******/temp.sql.gz
echo "transfered"
echo "delete local dump file"
rm -rf temp.sql.gz
echo "deleted"
echo "remote dump file extracting"
ssh ****@******** './extract.sh'
echo "remote dump file extracted"
echo "remote dump file inserting"
ssh ****@******** './dbinsert.sh'
echo "remote dump file inserted"
echo "remote dump file deleted"
echo "complete db dump"

쉘 스크립트에 mysql 비번을 넣는게 살짝 거시기하긴 하지만.. 존나 귀찮으므로 -_- 걍 넘어가자.

scp로 파일을 전송하고, ssh로 원격 서버의 쉘스크립트를 실행하기 위해서는 ssh key를 생성해서 넣어주면 된다.

키를 생성하기 위해서는 ssh-keygen으로 키를 생성한 후 ssh-copy-id 를 이용해서 목적지 서버에 넣어주면 된다.

ssh-copy-id 계정명@IP 이렇게 하고 패스워드를 입력하면 생성한 ssh key를 전송한다.

이후로는 패스워드 없이 해당 계정으로 접속이 가능해진다.

스크립트에서 extract.sh와 dbinsert.sh를 굳이 따로 구분해서 만들어놓은 이유는 압축풀기와 디비인서트 상황을 

구분지어서 상태를 표시해주기 위함. 당연히 스크립트 하나로 해서 넣는것도 가능하다.

댓글 남기기