Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

제큐리티

쉘 스크립트 바이너리로 변환 후 자동화 본문

뱅뱅뱅

쉘 스크립트 바이너리로 변환 후 자동화

제큐리티 2022. 11. 10. 17:39

ftp서버(192.168.56.101)에서 ftp를 활용해 파일들을 옮겨 받는 스크립트

#!/bin/sh : 스크립트 실행시킬 쉘

SERVER="ftp서버IP"

PORT="21" //ftp세션 연결 포트가 21번이기 때문

USER="ftp서버의 사용자ID"

PWD="ftp서버 사용자의 비밀번호"

#FILE_NAME="원하는 파일의 이름"

DOWN_DIR="ftp서버에서 원하는 파일이 있는 경로"

LOCAL_DIR="다운 받을 경로"

ftp -in $SERVER $PORT << sess

(ftp는 interactive기 때문에 복수의 파일을 전송 중에 대화형 묻기 기능을 사용함)

ex) yum으로 설치할 때 y 눌러주는 것과 같음

여기서는 -i, n 옵션만 주어 interactive를 사용하지 않고 초기 연결 시 자동 로그인을 생략

또한 << 뒤는 세션의 시작을 나타내므로 아무 이름으로 써도 무방

옵션 설명
-v 원격 서버 응답 표시하지 않음
-n 초기 연결 시 자동 로그인 생략
-i 복수 파일 전송 중에 대화형 묻기 기능 사용하지 않음
-d 디버깅 사용
-g 파일 이름에 와일드카드 사용하지 않음
-s:filename ftp 명령이 들어 있는 텍스트 파일 지정(ftp가 시작된 후에 자동으로 실행)
-a 데이터 연결을 바인딩할 때 로컬 인터페이스 사용
-A 익명으로 로그인
-x:send sockbuf 기본 SO_SNDBUF 크기인 8192 재정의
-r:recv sockbuf 기본 SO_RCVBUF 크기인 8192 재정의
-b:async count 기본 비동기 개수인 3 재정의
-w:windowsize 기본 전송 버퍼 크기인 65535 재정의
host 연결할 원격 호스트의 호스트 이름 또는 IP주소 지정

user $USER $PWD //ftp로그인 과정

(아래의 FileZilla에서 사용자명, 비밀번호 넣는 란이라고 생각하면 됨)

FileZilla 계정 정보 입력란

bin //바이너리전송 모드

전송 모드 설명
ASCII 일반적인 텍스트 문서 전송
Binary 그림이나 실행파일 등 모든 형식 파일 지원

#prompt // ftp 연결할 때 -i 옵션을 주지 않았다면 interactive모드를 끄기 위해 삽입해주어야 함

#get $FILE_NAME //파일이 1개일 때 get으로 받음

mget *.log // log로 끝나는 파일을 여러개 받음

bye //ftp 종료

sess //세션 종료

 

시행착오

1. 파일을 받을 서버에 ftp client가 설치되어 있어야함

  - yum -y install ftp

2. ftp:connect: Connection refused오류

- ftp서버에서 ftp 서비스가 구동 중인지 확인(ps -ef | grep vsftpd, systemctl status vsftpd)

- ftp 서비스가 구동 중이지만 ftp 연결되지 않으면

  - ftp서버의 ftp 포트 확인(21번 포트 사용하지 않으면 오류 발생)

  - 21번 포트를 사용하는데도 오류가 발생한다면 현재 연결을 시도하는 서버의 /etc/services파일에 ftp 항목 확인

  (ftp값이 기본 21번으로 설정되어 있지 않은 경우 외부 연결할 때도 포트 명시해주어야 함)

 

스크립트에 대한 설명은 끝났고 스크립트를 바이너리로 변환 후 자동화

1. shc 압축 파일 다운

wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz 

2. 파일 압축 해제

tar -xf shc-3.8.9b.tgz

3. 설치파일(setup) 설치

make install

4. 스크립트 파일 바이너리로 변환

shc -f "스크립트가 있는 경로"

경로에 이렇게 파일이 생김

(원래는 ftp.sh.x 생성되지만 가독성을 위해 ftp로 이름 바꿔줌 - mv ftp.sh.x ftp)

5. crontab -e로 자동화 주기 설정

명령어 설명
crontab -e 명령을 등록, 편집
crontab -d 등록된 명령 삭제
crontab -l 현재 등록된 리스트 출력
crontab -l -u otheruser otheruser 사용자가 등록한 crontab 리스트 출력
crontab -r 현재 사용자가 등록한 crontab 전체 삭제
주기 명령어
매분 실행 * * * * * /root/ftp
특정 시간 실행 45 5 * * 5 /root/ftp
매주 금요일 오전 5시 45분에 실행
반복 실행 0,20,40 * * * * /root/ftp
매일 매시간 0분, 20분, 40분에 실행
범위 실행 0-30 1 * * * /root/ftp
매일 1시 0분부터 30분까지 매분 실행
간격 실행 */10 * * * * /root/ftp
매 10분마다 실행

5분 간격으로 자동실행

분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6) 스크립트 경로

>& /dev/null //명령어를 실행 후 출력은 백그라운드로, 출력이 필요 없으므로 /dev/null로 전송

6. crond 재시작(변경 후 반드시 cron 다시 실행)

service crond restart

 

7. 전송 확인

 

'뱅뱅뱅' 카테고리의 다른 글

Tcpdump  (0) 2022.11.16
오라클 설치  (0) 2022.11.09
top  (0) 2022.11.09
레이드  (0) 2022.11.02
제임스 본딩  (0) 2022.10.25
Comments