본문 바로가기

CentOS/Study

[Study40]Linux에서 안전하게 파일 전송하기 - scp 및 sftp 소개

반응형

sCMD 명령어

명령 설명
ssh 원격 접속
scp 파일 전송
sftp 파일 전송 (FTP 보안 강화 버전)

sCMD는 리눅스 시스템 관리자가 시스템을 관리하고 유지 보수하기 위해 필수적인 강력한 명령 줄 도구 모음입니다. 보안 쉘 (ssh) 프로토콜은 sCMD에서 가장 일반적으로 사용되는 명령 중 하나입니다. 이를 사용하면 사용자는 원격 시스템에 안전하게 액세스하고 해당 시스템에서 명령을 실행할 수 있습니다. ssh를 사용하면 민감한 정보가 노출되는 것을 우려할 필요없이 원격 시스템에 액세스할 수 있습니다.

ssh 외에도 sCMD는 Secure Copy (scp)라는 안전한 파일 전송 프로토콜을 제공합니다. scp를 사용하면 사용자는 로컬 및 원격 시스템 간에 소프트웨어를 추가로 설치하지 않고 파일을 전송할 수 있습니다. scp 프로토콜은 이전의 rcp 프로토콜보다 더 안전하며 전송 중 데이터를 암호화합니다.

sCMD의 또 다른 유용한 도구 중 하나는 Secure FTP (sftp)입니다. SFTP는 전통적인 FTP의 보안 대안으로 로그인 자격 증명 및 파일 전송 데이터를 암호화하여 파일을 전송하는 보안 방식입니다. sftp를 사용하면 사용자는 시스템 간에 파일을 쉽고 안전하게 전송할 수 있습니다.

sCMD에는 네트워크 분석 도구인 tcpdump, ethereal, wireshark 등 다른 유용한 명령도 포함되어 있습니다. 이러한 도구를 사용하면 사용자는 네트워크 트래픽을 모니터링하고 문제를 해결할 수 있습니다. 시스템 관리자는 네트워크의 건강과 보안을 유지하기 위해 이러한 도구를 필수적으로 사용해야 합니다.

종합적으로, sCMD는 리눅스 시스템 관리자에게 필수적인 다목적 강력한 도구입니다. sCMD를 사용하면 관리자는 원격 시스템을 원격으로 관리하고 파일을 안전하고 효율적으로 전송할 수 있으므로 리눅스 시스템 관리자가 반드시 갖추어야 할 필수 도구입니다.

 

[참고] (TUI)tcpdump, (GUI)ethereal, wireshark

scp(Secure Copy)

Secure copy client 프로그램인 scp는 ssh를 설치하면 같이 설치되는 프로그램입니다. rpm -ql openssh-clients | grep scp 명령어로 확인할 수 있습니다. 별도의 ftp 클라이언트를 설치하지 않아도 손쉽게 파일 전송을 수행할 수 있으며, 데이터를 암호화하여 전송합니다. 이를 통해 자신의 컴퓨터에서 원격의 컴퓨터로 또는 원격의 컴퓨터에서 자신의 컴퓨터로 간단하게 파일을 전송할 수 있습니다. 이러한 기능은 파일 공유 및 백업 등의 작업에 유용하게 사용될 수 있습니다.

더불어, scp는 파일 전송 외에도 다양한 기능을 제공합니다. 예를 들어 scp를 이용하면 파일을 압축하여 전송할 수 있습니다. 또한, scp는 파일 전송 시간이나 파일 전송량 등의 정보를 제공하여 파일 전송 과정을 모니터링할 수 있습니다. 이러한 기능들은 파일 전송 과정에서 발생하는 문제를 미리 예방하고, 문제가 발생한 경우에도 빠르게 대처할 수 있도록 도와줍니다.

마지막으로, scp를 사용하는 것은 보안 면에서도 매우 안전합니다. scp는 데이터를 암호화하여 전송하기 때문에, 제3자가 데이터를 엿보거나 조작하는 것을 방지할 수 있습니다. 따라서, scp를 사용하면 안전하고 신뢰성 높은 파일 전송이 가능합니다.

 

[명령어 형식]

scp 커맨드는 리눅스 시스템에서 파일을 복사하는 데 사용됩니다. 이 명령어는 로컬 시스템에서 원격 시스템으로 파일을 복사하거나 원격 시스템에서 로컬 시스템으로 파일을 복사할 수 있습니다.

아래는 scp 커맨드에 대한 예시입니다.

# 로컬 시스템에서 원격 시스템으로 파일 복사하기
scp file1 192.168.10.252:/tmp/file2

# 로컬 시스템에서 원격 시스템으로 디렉토리 전체 복사하기
scp -r dir1 192.168.10.252:/tmp

# 원격 시스템에서 로컬 시스템으로 파일 복사하기
scp 192.168.10.252:/test/file1 /test

# 원격 시스템에서 로컬 시스템으로 디렉토리 전체 복사하기
scp -r 192.168.10.252:/dir1 /dir2

위 예시에서, 첫 번째 명령어는 로컬 시스템에서 원격 시스템으로 파일을 복사합니다. 두 번째 명령어는 로컬 시스템에서 원격 시스템으로 디렉토리 전체를 복사합니다. 세 번째 명령어는 원격 시스템에서 로컬 시스템으로 파일을 복사합니다. 네 번째 명령어는 원격 시스템에서 로컬 시스템으로 디렉토리 전체를 복사합니다.

따라서 scp 커맨드는 파일 및 디렉토리를 복사하는 데 유용한 명령어입니다.

scp 명령어는 cp 명령어와 형식이 유사하다. 그러나 scp 명령어는 네트워크를 통해 파일을 전송할 수 있는 기능을 지원한다.

# 로컬 파일을 원격 서버로 전송
scp file1 username@remote:/path/to/destination

# 원격 서버의 파일을 로컬 컴퓨터로 가져오기
scp username@remote:/path/to/file1 /path/to/destination

# 디렉토리 전송
scp -r dir1 username@remote:/path/to/destination

위의 예시는 로컬 파일을 원격 서버로 전송하는 방법, 원격 서버의 파일을 로컬 컴퓨터로 가져오는 방법 그리고 디렉토리 전송하는 방법을 보여준다.

 

scp 명령어 실습

준비

먼저, scp 명령어를 실습하기 위해서는 두 대 이상의 리눅스 서버가 필요합니다. 이번 실습에서는 server1, server2 두 대의 서버를 사용합니다.

  1. server2에서 sshd 서비스를 재시작합니다.
  2. # systemctl restart sshd
  3. sshd 서비스가 정상적으로 동작하는지 확인합니다.
  4. # systemctl status sshd
  5. sshd 프로세스가 실행 중인지 확인합니다.
  6. # pgrep -lf sshd
  7. server1에서 /test 디렉토리로 이동한 후, /etc/passwd 파일을 복사하고, linux200.txt 파일을 생성합니다.
  8. # cd /test # cp /etc/passwd linux200.txt
  9. linux200.txt 파일에 "scp test" 라는 내용을 추가합니다.
  10. # echo "scp test" >> linux200.txt
  11. ~/.ssh 디렉토리로 이동한 후, known_hosts 파일을 초기화합니다.
  12. # cd ~/.ssh # > known_hosts

이렇게 준비를 마친 후, scp 명령어를 실습할 수 있습니다.

 

원격 서버로 파일 복사

원격 서버로 파일을 복사하는 방법은 다양합니다. 하지만 대표적인 방법 중 하나인 scp를 사용하는 방법에 대해 알아보겠습니다.

먼저 scp 명령어를 입력합니다. 이때 /test/linux200.txt는 로컬에 있는 파일 경로이고, root@192.168.10.252:/tmp는 원격 서버의 파일 경로입니다. 그리고 서버에 처음 접속하게 될 경우, 인증을 받는 과정이 필요합니다.

# scp /test/linux200.txt root@192.168.10.252:/tmp
The authenticity of host '192.168.10.252 (192.168.10.252)' can not be established.
ECDSA key fingerprint is SHA256:VupU+fz6cK1zkTDfQxGuWW4YIt+aTy5yXNvxsVtHwz4.
ECDSA key fingerprint is MD5:27:8e:59:e4:ac:31:a7:4d:c6:92:88:bc:74:5c:45:c7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.252' (ECDSA) to the list of known hosts.
root@192.168.10.252 is password:
linux200.txt                                   100% 2274     1.8MB/s   00:00

다음으로, /etc/services 파일을 /test/CentOS200 경로로 복사합니다. 이후, 해당 파일을 원격 서버에 복사하는 작업을 수행합니다. 이때, 포트 번호를 지정해야 한다면, -P 옵션을 사용하면 됩니다.

# cp /etc/services /test/CentOS200
# scp -P 22 /test/CentOS200 root@192.168.10.252:/tmp   /* -P : Port Number */
root@192.168.10.252 is password:
Centos200                                      100%  655KB  40.8MB/s   00:00

마지막으로, 원격 서버에서 /tmp/ 경로에 있는 파일을 찾아보는 작업을 수행합니다.

# ssh 192.168.10.252 ls /tmp/*200*
root@192.168.10.252's password:
/tmp/Centos200
/tmp/linux200.txt

위와 같이 scp 명령어를 사용하면, 로컬과 원격 서버 사이에서 파일을 쉽게 복사할 수 있습니다.

 

원격 서버에서 파일 받아오기

  1. 원격 서버에서 파일 받아오기원격 서버(server2)에서 특정 파일(testfile1)을 생성합니다.
  2. (on server2) # useradd fedora # passwd fedora # su - fedora $ cp /etc/passwd testfile1
  3. server2에서 server1로 파일 전송server1에서 ssh로 server2로 연결하여 testfile1이 존재하는지 확인합니다.scp 명령어를 사용하여 server2의 testfile1을 server1의 /test 디렉토리로 전송합니다.전송이 완료되면 /test/testfile1 경로에 파일이 있는지 확인합니다.
  4. # ls /test/testfile1 /test/testfile1
  5. # scp fedora@192.168.10.252:/home/fedora/testfile1 /test fedora@192.168.10.252 is password: testfile1 100% 890 823.1KB/s 00:0
  6. (on server1) # hostname server1.example.com # ssh fedora@192.168.10.252 ls fedora@192.168.10.252 is password: testfile1

그러므로 위의 과정을 따르면 원격 서버에서 파일을 가져와 로컬 시스템에 저장할 수 있습니다.

 

원격 서버에서 디렉토리 전체 복사

원격 서버에서 복사할 디렉토리를 생성하고 파일을 만듭니다.

(on server1)
# ssh root@server2
[root@server2 ~]# mkdir /test
[root@server2 ~]# cd /test
[root@server2 test]# ls
[root@server2 test]# cat /etc/passwd | head -1 > echo.start
[root@server2 test]# ls
echo.start
[root@server2 test]# mkdir testdir
[root@server2 test]# touch testdir/file1
[root@server2 test]# exit

scp 명령어를 사용하여 원격 서버의 디렉토리를 로컬 시스템으로 전송합니다.

# scp -r 192.168.10.252:/test /tmp
root@192.168.10.252 is password:
echo.start                           100%   32    32.3KB/s   00:00
file1                                100%    0     0.0KB/s   00:00

전송된 파일을 확인합니다.

[root@server1 ~]# cd /tmp
[root@server1 tmp]# ls test
echo.start  testdir
[root@server1 tmp]# ls -ld test
drwxr-xr-x. 3 root root 39  3월 24 11:17 test
[root@server1 tmp]# cd test
[root@server1 test]# ls
echo.start  testdir
[root@server1 test]# tree
.
├── echo.start
└── testdir
    └── file1

1 directory, 2 files

위 예시에서는 원격 서버에서 /test 디렉토리 전체를 /tmp 디렉토리로 복사하는 것을 보여줍니다.

  1. ssh를 사용하여 원격 서버에 로그인합니다.
  2. /test 디렉토리를 만들고 파일을 만듭니다.
  3. scp 명령어를 사용하여 /test 디렉토리 전체를 /tmp 디렉토리로 복사합니다.
  4. 로컬 시스템에서 /tmp/test 디렉토리가 정상적으로 생성되었는지 확인합니다.

따라서 위 과정을 통해 scp 명령어를 사용하여 원격 서버에서 로컬 시스템으로 디렉토리 전체를 복사하는 방법을 알아보았습니다.

 

SFTP

SFTP는 Secure File Transfer Protocol의 약자로, 기존 FTP에 비해 암호화 및 인증 방식을 강화한 전송 방식입니다. FTP는 일반적으로 인터넷 상에서 파일을 전송할 때 많이 사용되고 있습니다. 그러나 FTP는 로그인 정보나 파일 정보를 암호화하지 않기 때문에 정보 노출의 위험성이 높습니다. 이에 비해 SFTP는 파일 전송 시 로그인 정보와 파일 정보를 암호화하여 통신하므로, 더욱 안전하게 파일을 전송할 수 있습니다.

SFTP는 SSH 프로토콜을 기반으로 하고 있습니다. SSH는 Secure Shell의 약자로, 보안 통신을 위한 프로토콜입니다. SFTP는 SSH의 일부로, SSH 프로토콜을 이용해서 파일 전송을 처리합니다.

SFTP는 다른 프로토콜과 달리, TCP 22번 포트를 사용합니다. 이는 SSH 프로토콜과 같은 포트 번호를 사용하기 때문입니다. 그래서 SFTP를 사용하려면, 방화벽 설정에서 22번 포트를 열어주어야 합니다.

SFTP는 다양한 운영체제에 적용 가능하며, 각 운영체제에 따라 SFTP 서버를 설치하는 방법이 다릅니다. 예를 들어, Linux에서는 openssh 패키지를 설치하면 SFTP 서버를 사용할 수 있습니다. 또한, SFTP는 명령어 형식으로 사용할 수 있으며, 다음과 같은 명령어를 사용합니다.

# sftp [계정]@[상대방주소]:[소스경로]

위 명령어를 사용하면, SFTP를 통해 다른 서버로 파일을 전송할 수 있습니다. 이때, 계정과 상대방 주소, 소스 경로를 지정해주어야 합니다.

또한, SFTP는 파일 전송 외에도, 파일의 업로드, 다운로드, 삭제, 목록 조회 등의 작업을 수행할 수 있습니다. 이를 위해 다양한 명령어를 제공하고 있으며, 이를 사용하여 보다 효율적으로 파일 관리를 할 수 있습니다.

 

sftp 명령어 실습

sftp 명령어를 이용하여 파일을 전송하는 예시 코드입니다. 코드를 단계별로 나누어 설명해드리겠습니다.

먼저, 로컬 시스템에서 서버로 접속합니다.

# sftp fedora@192.168.10.252
fedora@192.168.10.252's password:
Connected to 192.168.10.252.

접속한 후, 원격 시스템의 작업 디렉토리를 확인합니다. 현재 접속한 원격지는 fedora 계정의 홈 디렉토리입니다.

sftp> pwd
Remote working directory: /home/fedora

원격 시스템의 파일 목록을 확인합니다.

sftp> ls
file1      file2      file3      testfile1

로컬 시스템의 작업 디렉토리를 변경합니다.

sftp> lcd /root

로컬 시스템의 파일들을 원격 시스템으로 전송합니다.

sftp> put linux*

원격 시스템의 파일 목록을 다시 확인합니다.

sftp> ls
file1         file2         file3         linux200      linuxfile200  testfile1

로컬 시스템의 작업 디렉토리를 다시 변경합니다.

sftp> lcd /root

원격 시스템의 파일들을 로컬 시스템으로 다운로드합니다.

sftp> mget linux*

다운로드한 파일들을 로컬 시스템에서 확인합니다.

sftp> !ls
Desktop    Music     Templates	      initial-setup-ks.cfg Documents  Pictures  Videos
linux200   Downloads  Public          anaconda-ks.cfg      linuxfile200

sftp 세션을 종료합니다.

sftp> quit

이제 로컬 시스템에서 다운로드한 파일들을 확인합니다.

[root@server1 test]# ls
linux200  linuxfile200

이렇게 sftp 명령어를 이용하여 파일을 전송할 수 있습니다.

반응형