(Study40)리눅스에서 안전하게 파일 전송하기 – scp와 sftp 소개

sCMD 명령

명령 설명
SSH 원격 액세스
scp 파일 전송
SFTP 파일 전송(FTP 보안 강화 버전)

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

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

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

sCMD에는 네트워크 분석 도구인 tcpdump, ethereal 및 wireshark와 같은 기타 유용한 명령도 포함되어 있습니다. 이러한 도구를 통해 사용자는 네트워크 트래픽을 모니터링하고 문제를 해결할 수 있습니다. 시스템 관리자는 이러한 도구를 사용하여 네트워크를 건강하고 안전하게 유지해야 합니다.

전반적으로 sCMD는 Linux 시스템 관리자에게 필수적인 다재다능하고 강력한 도구입니다. sCMD를 사용하면 관리자가 원격 시스템을 원격으로 관리하고 파일을 안전하고 효율적으로 전송할 수 있으므로 Linux 시스템 관리자에게 필수적인 도구입니다.

(주) (TUI)tcpdump, (GUI)ethereal, wireshark

scp(보안 사본)

보안 복사 클라이언트 프로그램인 scp는 ssh와 함께 설치되는 프로그램입니다. rpm -ql openssh-클라이언트 | grep scp 명령으로 확인할 수 있습니다. 별도의 FTP 클라이언트를 설치하지 않고 간편하게 파일을 전송할 수 있으며, 데이터는 암호화되어 전송됩니다. 이렇게 하면 컴퓨터에서 원격 컴퓨터로 또는 원격 컴퓨터에서 컴퓨터로 파일을 간단하게 전송할 수 있습니다. 이러한 기능은 파일 공유 및 백업과 같은 작업에 유용할 수 있습니다.

또한 scp는 파일 전송 외에도 많은 기능을 제공합니다. 예를 들어 scp를 사용하여 파일을 압축하고 전송할 수 있습니다. 또한 scp는 파일 전송 시간 및 파일 전송량과 같은 정보를 제공하여 파일 전송 프로세스를 모니터링할 수 있습니다. 이러한 기능은 파일 전송 프로세스의 문제를 방지하고 문제 발생 시 신속하게 대응하는 데 도움이 됩니다.

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

(명령 형식)

scp 명령은 Linux 시스템에서 파일을 복사하는 데 사용됩니다. 이 명령은 로컬 시스템에서 원격 시스템으로 또는 원격 시스템에서 로컬 시스템으로 파일을 복사할 수 있습니다.

다음은 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 명령을 실행하려면 두 개 이상의 Linux 서버가 필요합니다. 이 연습에서는 server1과 server2라는 두 개의 서버를 사용합니다.

  1. server2에서 sshd 서비스를 다시 시작하십시오.
  2. # systemctl 재시작 sshd
  3. sshd 서비스가 제대로 작동하는지 확인하십시오.
  4. # systemctl 상태 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. # 에코 “scp 테스트” >> linux200.txt
  11. ~/.ssh 디렉토리로 이동하여 known_hosts 파일을 초기화합니다.
  12. # cd ~/.ssh # > 알려진_호스트

이렇게 준비한 후 scp 명령어를 연습하시면 됩니다.

원격 서버에 파일 복사

원격 서버에 파일을 복사하는 방법에는 여러 가지가 있습니다. 하지만 대표적인 방법 중 하나인 scp 사용법을 살펴보자.

먼저 scp 명령을 입력합니다. 여기서 /test/linux200.txt는 로컬의 파일 경로이고 [email protected]:/tmp는 원격 서버의 파일 경로입니다. 그리고 처음 서버에 접속할 때 인증 과정을 거쳐야 합니다.

# scp /test/linux200.txt [email protected]:/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.
[email protected] 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 [email protected]:/tmp   /* -P : Port Number */
[email protected] is password:
Centos200                                      100%  655KB  40.8MB/s   00:00

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

# ssh 192.168.10.252 ls /tmp/*200*
[email protected]'s password:
/tmp/Centos200
/tmp/linux200.txt

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

원격 서버에서 파일 검색

  1. 원격 서버로부터 파일 받기 원격 서버(server2)에 특정 파일(testfile1)을 생성합니다.
  2. (서버 2에서) # useradd fedora # passwd fedora # su – fedora $ cp /etc/passwd testfile1
  3. server2에서 server1로 파일 전송 server1에서 ssh를 통해 server2에 연결하여 testfile1이 있는지 확인합니다. scp 명령을 사용하여 testfile1을 server2에서 server1의 /test 디렉토리로 전송하십시오. 존재하는지 확인하십시오.
  4. # ls /테스트/테스트파일1 /테스트/테스트파일1
  5. # scp [email protected]:/home/fedora/testfile1 /test [email protected]는 비밀번호: testfile1 100% 890 823.1KB/s 00:0
  6. (server1에서) # 호스트 이름 server1.example.com # ssh [email protected] ls [email protected]는 비밀번호: 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
[email protected] 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 [email protected]
[email protected]'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 명령을 사용하여 파일을 전송할 수 있습니다.