[Python] os.system / SCP 전송 (ssh 비밀번호 없이)
현재 MySQL 3.28 로 구성된 Slave를 MySQL 5.6.31 로 업그레이드 작업을 진행 중이다.
Master의 경우 작업 당일날 진행할 예정이고,
Slave의 경우 백업 데이터가 일 단위로 구성되고 있기에 이 부분에 대해 먼저 다른 장비로 Migration 을 진행 하기로 했다.
매일 Dump를 이용해서 작업 하기에는 지루한 작업이 될 것이다.
그래서 매일 백업 데이터를 dump 받아 scp 로 전송 후 다른 장비에서 해당 dump를 이용한 load 및 데이터 건수 비교하는 스크립트를 개발 중이다.
그 중 scp 로 전송하는 방법이 잠시 막혀 공유하고자 한다.
scp 를 이용하는 방법으로 검색하면 twisted ? paramiko_scp ? pexpect ? 등을 설치해서 간편하게 사용하는 방법이 있지만..
가급적이면 설치 등은 피하는 방법을 사용하다 보니
어쩔 수 없이 os.system 이라는 명령문을 사용할 수 밖에 없었다.
os.system은 os에서 사용하는 shell 명령문을 사용 가능하도록 하는 문장인데...
scp 를 하게 되면 먹통이 되는 현상을 확인할 수 있었다.
또한 간단하게 테스트하기 위해서 python에서 직접 os.system 사용하여 scp 를 날리면 비밀번호를 묻는 것을 확인할 수 있었다.
(비밀 번호 묻는게 당연한 이야기 이겠지만....)
여러가지 확인중 ssh 를 이용하여 비밀번호 묻지 않고 바로 전송 하는 방법으로 진행 했더니 정상적으로 전송이 되는 것을 확인할 수 있었다.
아래는 간단하게 ssh 암호 묻지 않는 방법에 대해서 공유해 본다.
(물론 암호 관련하여서는 가급적이면 하지 않는 방법이 최선이며, 꼭 해야 된다면 내부망에서만 가능하도록 하자)
- SSH 암호 없이 접속하는 방법
접속시도하는 (source OS) 에서
1. ssh key 생성
$ ssh-keygen -t rsa
- /root/.ssh/ 아래에 암호 관련된 파일이 생성
2. ssh 복사
- /root/.ssh/id_rsa.pub 파일을 cat 으로 열어 내용을 복사
3. Target OS에서 authorized_keys 생성
- Target (접속하는 서버) 의 /root/.ssh/authorized_keys 파일을 만들어 내용 복사 진행
4. 테스트 진행
- source OS에서 target OS 으로 접속 진행 테스트
- port는 1004 라고 가정
$ ssh -p 1004 192.168.0.2
암호없이 접속 되면 성공
어쩌면 이것도 ETL 의 개념???과 비슷하지 않을까 싶다. ㅎㅎㅎㅎㅎㅎㅎㅎ
ETL 이란 ? [출처] 위키백과 https://ko.wikipedia.org/wiki/%EC%B6%94%EC%B6%9C,_%EB%B3%80%ED%99%98,_%EC%A0%81%EC%9E%AC
추출, 변환, 적재(Extract, transform, load, ETL)는 컴퓨팅에서 데이터베이스 이용의 한 과정으로 특히 데이터 웨어하우스에서 다음을 아우른다:
동일 기종 또는 타기종의 데이터 소스로부터 데이터를 추출한다.
조회 또는 분석을 목적으로 적절한 포맷이나 구조로 데이터를 저장하기 위해 데이터를 변환한다.
최종 대상(데이터베이스, 특히 운영 데이터 스토어, 데이터 마트, 데이터 웨어하우스)으로 변환 데이터를 적재한다.