안녕하세요 람토리 입니다!!(๑˃̵ᴗ˂̵)و
드디어 IT 첫 게시글 이네요 두근두근 ㅋㅋㅋㅋ
요즘 회사 보안규정이 강화되면서
Server To Server 접속방식이
FTP -> SFTP 로 변경되게 된 경우가 많죠?
저도 얼마전에 전환 작업을 했는데..
구글링에 의존하다보니 넘나 막막했던것 ㅠㅠ...
그래서 과정 공유 드립니다!!
* FTP vs SFTP 차이점
FTP : 기본 21번 포트 |
SFTP : 기본 22번 포트 |
파라미터로 패스워드 전송하여 자동인증방식 지원 |
파라미터로 패스워드 전송 불가능 |
로 핵심은 파라미터 전송 부분입니다.
SFTP는 파라미터로 패스워드 전송이 불가능하기 때문에,
프롬프트가 패스워드 입력을 기다립니다.
(이 부분을 expect 명령어를 이용해 echo 로 패스워드를 입력할 수도 있지만
그럼 스크립트가 너무 지저분해져서 하고싶지 않았어요 ㅋㅋㅋㅋ....)
Batch Shell 을 이용하여 자동 SFTP 커넥션을 맺는다면
타임아웃 각인 부분이네요 ^_^...
* FTP 접속방식
address='a.b.c.d' # destination server ip
id='test_user' # destination user
password='ramtol' # destination user pw
ftp -n $address << EOF
user $id $password
# 패스워드가 파라미터로 전송되어 자동로그인 가능
cd 데스티네이션 서버 절대경로
lcd 로컬 서버 절대경로
put 파일이름
quit # quit = bye = exit
EOF
* SFTP 접속방식
SFTP는 위와같은 방식이 불가능하여,
사전에 Local Server 와 Destination Server 사이에
먼저 인증키를 발급해서 공유해놓습니다.
두 서버만 알 수 있는 암호값으로 통행권을 미리 발급받아놓는거죠.
1) Local 서버에서 SFTP를 실행할 계정에, ssh 인증키를 발급받아 놓습니다.
$ ssh-keygen -t rsa
(엔터)xn번
▶Local 서버계정 홈 디렉토리에 .ssh 디렉토리가 생기며
그 하위에 id_rsa.pub 이 발행됩니다.
2) id_rsa.pub 파일을 Destination Server에 등록
id_rsa.pub 에는 ssh 인증 해시값과 맨~~ 뒤에
Local 서버의 계정@ip(또는 서버명) 값이 있습니다.
이 파일을 Destination 서버 접속할 계정 홈에 파일명을
authorized_keys 로 변경해서 등록합니다.
3) Local 서버에서 한번 접속을 해 줍니다.
$ sftp $id@$address
이때는 프롬프트가 패스워드를 기다리기 때문에 패스워드를 입력해줍니다!
Are you sure to continue connecting 나오면 yes 입력 해 주시구요
▶Local 서버 .ssh/known_hosts 에 Destination 서버 IP가 등록되며
마침내 자동인증이 가능해 집니다.
[Permanently added x.x.x.x to the list of known hosts.] 문구가 뜸
* 최초 접속을 하지 않으면 Verification Error 발생.
* 기존 인증키로 접속할 Destination IP가 변경된다면
known_hosts 파일에 등록된 IP를 삭제한 뒤 다시 위와같이 접속 해 준다.
4) Shell Script 수행
sftp -oPort=22 $id@$address << EOF
# -oPort 는 생략 가능. SFTP 포트가 22가 아닌경우 명시할것
cd 데스티네이션 서버 절대경로
lcd 로컬서버 절대경로
put 파일명
quit
EOF
저는 처음에 접속을 해주지 않아서 에러가 발생했어요 ㅠ
Host key verification failed.
원인 찾는데도 오래걸렸구요 ㅠ_ㅠ
이 글을 보시는 분들은 쉽게 해결하시면 좋겠어요~
#FTP #SFTP #SFTP_script #SFTP스크립트 #SFTP자동인증 #SFTP접속방법 #Unix_SFTP