본문 바로가기
IT Security/LINUX Basic

20. Linux - 윈도우와 리눅스 사이 파일 이동 시키기(SCP, SFTP)

by Rosmary 2020. 6. 3.
728x90
반응형

지난 포스팅에서 공개키를 이용하여 리눅스에 비밀번호 입력 없이 SSH 접속하는 방법에 대해 알아보았다. 그런데, 해당포스팅만 보신 분들이라면, 도대체 어떻게 윈도우의 파일을 리눅스로 옮겼는지 감이 안잡히는 분들도 있을 것이다. 사실, 원래 필자가 본 포스팅을 먼저 작성한 뒤, 공개키에 대한 이야기를 진행하려 했는데, 워낙 바쁜 시절을 보내다 보니... 순서가 조금 뒤바뀌어버렸다. 각설하고! 윈도우의 파일을 리눅스로 옮기는 방법에 대해 알아보자.

 

 

1. 파일 전송 프로토콜

 

리눅스에 원격으로 접속할 때 사용하는 서비스는 SSH다. 이 SSH는 tcp라는 방식으로 리눅스와 원격 컴퓨터 사이에 통신이 될 수 있도록 만들어준다. 일반적인 설정에서 통신 포트는 22번을 사용하고 말이다. 이렇게, SSH가 특정 방식으로 통신하는 것을 다음과 같이 표현할 수 있다.

 

tcp / 22

 

이 말은, SSH 서비스가 tcp 방식으로 22번 통신 포트를 이용하여 서로 다른 컴퓨터의 통신을 진행한다는 의미다. 저 tcp/22는 SSH의 프로토콜이라고 부르며, tcp/22는 SSH와 동일한 의미를 가진다.

 

원격으로 리눅스 쉘에 접속하여 통신을 진행하는 프로토콜이 tcp/22라면, 다른 컴퓨터 사이 파일을 전송해주는 프로토콜도 따로 존재하지 않을까? 당연히 존재한다. 

 

(1) FTP

 

FTP는 File Transfer Protocol의 약자다. 이름에서도 알 수 있듯이, 서로 다른 컴퓨터 사이 파일을 전송하기 위해 사용하는 프로토콜이었다. FTP는 tcp 통신을 하며, 통신 포트는 20번과 21번, 2개를 사용하는 특이한 녀석이다.

 

필자가 '프로토콜이었다'라고 과거형으로 쓴 데에는 이유가 있는데, 이 FTP 통신의 경우, 파일 전송 정보가 암호화되지 않은 채로 전송되기 때문에, 보안에 매우 취약하여 몇몇 곳을 제외하면 서버 관리자들이 이 프로토콜을 사용하는 경우가 거의 없기 때문이다.

 

이러한 보안 취약점으로 인해 나타난 것이 바로 SFTP다.

 

 

(2) SFTP

 

SFTP의 S는 Secure, 즉 안전한 환경을 의미한다. 이 말은 FTP와 달리, SFTP를 사용하면, 전송 파일에 대한 내용이 모두 암호화되어 전달되므로, 누군가가 이를 탈취하더라도 함부로 엿볼수 없다는 말이다.

 

특이하게도 이 프로토콜은 SSH와 동일하게 tcp/22 프로토콜을 공유하며, FTP와 달리 통신 포트도 1개만 사용한다. "어?? 서로 다른 서비스를 같은 프로토콜에서 사용하나요??"라고 의아해하시는 분들이 있을텐데, SSH의 약자를 살펴보면 그 이유를 충분히 납득할 수 있다.

 

SSH = Secure SHell

 

즉, 암호화되어 정보를 전송하는 프로토콜에, 파일 전송도 암호화하여 보낼 수 있도록 만들어 둔 것이라 보면 된다.

 

SFTP의 작동방식은 다음과 같다. 우선, SSH와 동일하게 리눅스 서버로 접속한다. 접속하면 SSH와는 조금 다른 형태의 명령어들을 사용하여 파일 관련된 작업을 진행할 수 있는데, 이 명령어들을 이용하여 파일을 업로드하거나 다운받은 뒤, exit 명령어로 SFTP를 벗어나면 끝이다.

 

SFTP 외에, 파일을 전송하는 프로토콜이 하나 더 존재하는데 이는 마지막으로 설명할 SCP다. 

 

 

(3) SCP

 

SCP의 S역시 Secure를 뜻한다. 그리고 뒤에 있는 cp는 리눅스에서 파일 복사를 위해 사용한 cp(copy)와 동일하다. 즉, Secure CoPy라는 뜻인데, 이 SCP 역시 tcp/22번 프로토콜을 공유한다.

 

SFTP와 SCP에는 큰 차이점이 하나 존재하는데, SFTP가 리눅스 서버에 파일을 업로드하거나, 서버로부터 다운로드 받는 행위가 둘 다 가능한 반면, SCP는 단방향으로 파일을 전달하는 기능밖에 제공하지 않는다. 리눅스의 cp 명령어를 많이 사용해보신 분들이라면 알겠지만, SCP는 파일을 복사해서 이동시켜주는 역할을 하기 때문에, SFTP와 같이 리눅스 서버에 직접 접속하는 과정은 발생하지 않는다. 대신 말 그대로 파일을 복사하고 '전송'만 해준다.

 

대략적인 파일 전송 방식에 대해, 살펴보았으니, 이제 실습을 통해 어떻게 이들을 사용해야하는지 알아보자.

 

 

 

2. SFTP

 

윈도우의 파일을 리눅스로 보내는 방법 중, 가장 원시적인 방법은 cmd 창에서 SFTP나 SCP 명령어를 사용하는 것이다. 우선 SFTP부터 알아보자.

 

** 참고!! cmd에서 SFTP와 SCP를 사용하기 위해서, cmd에 SSH 서비스를 사용할 수 있도록 설정하는 선행 작업이 먼저 진행되어야 한다. 자세한 사항은 여기를 눌러 참고하자.

 

 

윈도우를 누르고 'cmd'라고 입력하면 '명령 프롬프트'라는 프로그램이 하나 나타난다. 이 프로그램을 실행시킨다. 그리고 cd 명령어를 이용해 바탕화면 폴더로 이동한다(cmd가 관리자 권한으로 실행되지 않았다면, 대부분 "cd Desktop"이라는 명령어로 이동이 가능하다)

 

 

그리고, 필자는 리눅스에 전송하려는 파일을 SFTP_TEST라는 이름으로 바탕화면에 만들었다. 확장자는 txt로.

 

 

이제 이 파일을 SFTP를 이용하여 필자의 핸드폰 리눅스 서버로 이동시키려 한다.

 

cmd 창에서, sftp를 누르면, sftp의 사용 방법이 쭉 출력된다. 마치 리눅스에서 나타나는 것처럼 말이다.

 

사용법에도 나와 있듯이, SFTP로 리눅스에 접속하는 것은 SSH 접속 방식과 동일하다. 그렇기 때문에, SSH 통신 포트 변경이 없는 한(SSH와 SFTP는 하나의 통신 포트를 공유한다는 것을 명심하자..), 옵션을 사용할 일이 거의 없다. 아래와 같이 접속을 진행해보자.

 

 

접속 후, 프롬프트의 모양이 "sftp>"로 다른 점을 제외하면, 일반적인 SSH 접속과 비슷하다. 이제 help 명령어로, sftp 접속 시, 사용할 수 있는 명령어를 살펴보자.

 

 

SFTP에서 사용할 수 있는 명령어는 위의 사진과 같이 한정적이다. 대부분이 폴더 경로 이동 및 생성, 삭제 등의 작업과 파일 이동에만 국한되어 있기 때문이다. 대부분은 이전의 포스팅들에서 다루었던 내용과 비슷한 명령어니 생략하고, 단 2개의 명령어만 더 알아보도록 하자.

 

 

(1)  파일의 업로드(get) 및 다운로드(put)

 

명령어 중에 get과 put 이라는 명령어가 있다. 명령어의 의미에서도 알 수 있듯이, get은 파일의 획득(다운로드), put은 파일을 서버에 싣는(업로드) 명령어이다. 이제 우리는 윈도우에서 만든 SFTP_TEST.txt를 접속한 계정의 홈 디렉토리에 올려놓으려 한다. 다음과 같은 명령어로 말이다.

 

 

파일 전송이 완료된 뒤, ls -lh 명령어로 SFTP_TEST.txt가 옮겨진 것을 확인할 수 있다. pwd는 현재 리눅스의 경로가 /home/loricatuslupus로 sftp 접속 계정의 홈 디렉토리임을 알려준다. Putty로 원격 접속 후, 해당 파일의 내용을 열어보면, 필자가 윈도우에서 집어넣었던 내용이 고스란히 나타남을 볼 수 있다.

 

 

이제, 필자는 이 파일의 내용을 변경한 뒤, 윈도우로 다운로드를 받을 생각이다. 우선, 파일의 내용은 putty에서 다음과 같이 변경하고 저장한다.

 

 

접속 중인 SFTP에서 get 명령어를 이용해, 내용이 변경된 파일을 아래와 같이 다운받는다.

 

 

우리는 cmd에서 sftp를 시작할 때, Desktop 폴더에 위치해있었기 때문에, 다운받은 파일 역시 바탕화면에 위치하게 된다. 파일을 열어보면, 다음과 같이 리눅스에서 작성한 결과로 변경된 내용을 확인할 수 있다.

 

 

 

SFTP를 이용하여 리눅스 서버에 파일을 올리거나 역으로 다운받는 방법은 이걸로 끝이다. 매우 간단하다. 전송이 완료되면 bye나 exit를 이용해 서버 접속을 종료하면 된다.

 

하지만, SFTP는 사용하기가 조금 불편한 점이 몇 가지 있다. 우선, 파일의 업로드 및 다운로드 경로를 별도로 명시할 수 있는 기능이 없기 때문에, 서버 접속 전, 그리고 접속 후에도 명령어를 이용해 해당 파일을 업/다운로드 할 경로로 계속해서 이동해 주어야 한다. 이와 더불어서, 업로드 또는 다운로드 할 파일의 이름이 긴 경우, tab키로 자동 완성이 되지 않기 때문에 일일히 오타가 나지 않도록 파일명을 입력해야한다는 번거로움이 있다.

 

이러한 불편함 때문에 나타난 것이 SCP다. 이제 SCP의 사용 방법에 대해 알아보자.

 

 

 

 

3. SCP


SCP는 말 그대로 복사한 파일을 암호화하여 전송해주는 기능을 제공한다. 사용 방식 또한 리눅스의 cp 명령어와 매우 유사하다. 

 

cmd를 실행한 뒤, scp 명령어를 치면 scp의 사용 방법이 나타난다.

 

scp 사용법에도 나와 있듯이, scp 명령어는 다음과 같은 포맷으로 사용한다.

----------------------------------------------------------------------------

scp 이동할_파일명 리눅스계정@리눅스IP:{리눅스 내 파일 저장 경로}

---------------------------------------------------------------------------- 

 

바탕화면에 SCP_TEST.txt 파일을 만들고, 내용을 다시 변경한 뒤 저장한다. 그리고 이 파일을 접속 계정의 홈 디렉토리로 옮기는 작업은 다음과 같이 진행하면 된다. 전송 전에 나타나는 비밀번호 인증 시, 접속 계정의 비밀번호를 정확히 입력해야만 파일이 전송된다.

 

 

마찬가지로 Putty로 접속하여 해당 파일의 내용을 확인해보면, 윈도우에서 작성한 내용과 동일함을 알 수 있다.

 

 

SCP를 사용하면, cmd에서 파일이 위치한 경로로 이동하는 선행 작업 또는 파일 업로드 경로로 번거롭게 이동하는 작업이 없기 때문에, SFTP보다는 확실히 이점이 있다.

 

바탕화면 폴더의 상위 폴더에서 SCP를 실행하여 바탕화면에 위치한 파일을 리눅스로 옮긴 모습. 100% 전송 완료되었음을 알 수 있다.

 

다만, SFTP와 달리, 리눅스 서버에서 윈도우 서버로의 파일 다운로드는 할 수 없다는 단점이 있다.

 

 

(4) 기타 - SCP 프로그램

 

검은 바탕에 흰 글씨(필자는 녹색...)를 싫어하는 사람들 중 일부는, sftp나 scp와 같이 번거로운 명령어 입력 대신, 마우스 클릭으로만 파일을 옮길 수 있는 프로그램을 만들어냈다. 가장 유명한 프로그램은 winSCP와 FileZila라는 프로그램이며, 두 프로그램의 사용법은 매우 유사하다. 필자는 winSCP를 이용하여 해당 프로그램의 사용법에 대해 간단히 작성하려 한다.

 

** 두 프로그램 모두, 인터넷에 검색하면 무료로 다운받을 수 있다. 귀찮은 분들은 아래의 링크를 타도록 하자.

 

- winSCP:  https://winscp.net/eng/download.php

- FileZila:  https://filezilla-project.org/download.php?platform=win64

 

 

winSCP를 다운받고 컴퓨터에 설치한 뒤, 실행하면, 다음과 같이 접속할 리눅스 IP와 계정 정보를 입력하는 창이 나온다.

 

호스트 이름에 IP를 입력하면 된다. FileZila는 프로그램 상단에 이를 입력하는 칸이 별도로 존재한다.

 

IP와 계정정보를 입력하고 로그인을 누르면, Putty 접속 시, 볼 수 있던 파일과 폴더명을 윈도우 그래픽으로 고스란히 볼 수 있다.

 

 

좌측은, 현재 윈도우의 폴더 경로를, 우측은 접속한 리눅스 계정의 홈 디렉토리를 보여준다. 파일의 이동은, 마치 윈도우에서 마우스로 파일 잡고 이동 시키듯이 이동시키면 된다. 리눅스 서버에서 SFTP_TEST.txt 파일을 윈도우로 옮기려면, 우측의 파일을 마우스로 잡아 좌측으로 끌고 오면 된다. 로그인 시 사용하는 프로토콜이 SFTP라도, 파일이 이동하는 것이 아니라 복사된다는 점이 SCP와 유사하다.

 


이번 포스팅에서는 윈도우의 파일을 리눅스에 업로드하는 방법과 역으로 리눅스 서버에서 윈도우로 파일을 다운받는 방법에 대해 알아보았다. 아무래도 윈도우에 익숙한 현대 사람들은 리눅스에서 문서 수정을 진행하는 것보다. 윈도우에서 수정하는 것을 더 편하게 여기기 때문에, 리눅스 서버 운영자들도 리눅스 스크립트 수정 등의 작업을 진행할 때 위와 같은 방법을 주로 사용하곤 한다.

 

다음 포스팅에서는 리눅스에서 웹 페이지를 만드는데 사용하는 서비스에 대해 알아보려 한다.

 

 

 

Fin.

 

 

반응형

댓글