소개
FTP, 파일 전송 프로토콜(File Transfer Protocol)은 두 원격 시스템 간에 파일을 전송하는 인기 있는 비암호화 방법이었습니다. 2022년 기준으로 대부분의 현대 소프트웨어에서 보안 부재로 인해 더 이상 사용되지 않으며 대부분 레거시 응용 프로그램에서만 사용될 수 있습니다.
SFTP, Secure File Transfer Protocol의 약자로, 안전한 연결을 통해 FTP 명령을 실행할 수 있는 SSH에 내장된 별도의 프로토콜입니다. 일반적으로 FTP 서버가 필요한 모든 상황에서 대체할 수 있습니다.
대부분의 경우 SFTP가 기본적으로 FTP보다 선호되며, 그 기본 보안 기능과 SSH 연결에 의존할 수 있는 능력 때문입니다. FTP는 신뢰할 수 있는 네트워크나 제한된 경우에만 사용해야 하는 불안전한 프로토콜입니다.
많은 그래픽 도구에 SFTP가 통합되어 있지만, 이 가이드에서는 대화형 명령 줄 인터페이스를 통해 그 사용법을 보여줄 것입니다.
SFTP로 연결하는 방법
SFTP는 기본적으로 SSH 프로토콜을 사용하여 인증하고 안전한 연결을 설정합니다. 따라서 SSH에서 제공하는 동일한 인증 방법을 사용할 수 있습니다.
비밀번호로 인증할 수는 있지만 기본적으로 SSH 키를 생성하고 공개 키를 액세스해야하는 시스템에 전송하는 것이 좋습니다. 이것이 훨씬 더 안전하며 장기적으로 시간을 절약할 수 있습니다.
이미 하지 않은 경우 SSH 키 설정을 위한 이 가이드를 참조하십시오.
SSH를 사용하여 기계에 연결할 수 있다면 파일을 관리하기 위해 SFTP를 사용할 필요가 있는 모든 필수 요구 사항을 완료한 것입니다. 다음 명령을 사용하여 SSH 액세스를 테스트하십시오:
작동하면 다음을 입력하여 빠져 나오십시오:
이제 다음 명령을 사용하여 SFTP 세션을 설정할 수 있습니다:
원격 시스템에 연결되고 프롬프트가 SFTP 프롬프트로 변경됩니다.
사용자 정의 SSH 포트에서 작업하는 경우(기본 포트 22가 아님), 다음과 같이 SFTP 세션을 열 수 있습니다:
이렇게하면 지정된 포트를 통해 원격 시스템에 연결됩니다.
SFTP에서 도움말 얻기
먼저 배워야 할 가장 유용한 명령은 도움말 명령입니다. 이것은 다른 SFTP 명령의 요약에 액세스를 제공합니다. 프롬프트에 다음 중 하나를 입력하여 호출할 수 있습니다:
또는
이렇게하면 사용 가능한 명령 목록이 표시됩니다:
OutputAvailable commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-Ppr] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
. . .
우리는 다음 섹션에서 볼 명령어 몇 가지를 살펴볼 것입니다.
SFTP로 탐색하기
우리는 셸과 유사하게 작동하는 여러 명령어를 사용하여 원격 시스템의 파일 계층 구조를 탐색할 수 있습니다.
먼저 현재 원격 시스템의 디렉토리를 찾아서 우리 자신을 오리엔트 시켜봅시다. 일반적인 셸 세션과 마찬가지로 다음을 입력하여 현재 디렉토리를 얻을 수 있습니다:
OutputRemote working directory: /home/demouser
우리는 다른 익숙한 명령어로 원격 시스템의 현재 디렉토리 내용을 볼 수 있습니다:
OutputSummary.txt info.html temp.txt testDirectory
주의할 점은 SFTP 인터페이스 내의 명령어가 일반적인 셸 구문과 1:1 대응이 아니며 기능이 풍부하지 않다는 것입니다. 그러나 더 중요한 선택적 플래그를 구현하는 명령어도 있습니다. 예를 들어, ls
에 -la
를 추가하여 더 많은 파일 메타데이터와 권한을 볼 수 있습니다:
Outputdrwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 .
drwxr-xr-x 3 root root 4096 Aug 13 15:02 ..
-rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history
-rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout
-rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc
drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache
-rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile
. . .
다른 디렉토리로 이동하려면 이 명령어를 사용할 수 있습니다:
이제 원격 파일 시스템을 탐색할 수 있지만, 로컬 파일 시스템에 액세스해야 하는 경우는 어떨까요? 우리는 명령어 앞에 로컬 파일 시스템으로 명령어를 지시할 수 있습니다. l
을 로컬 앞에 붙이면 됩니다.
지금까지 논의한 모든 명령에는 로컬 상응물이 있습니다. 로컬 작업 디렉토리를 출력할 수 있습니다:
OutputLocal working directory: /Users/demouser
로컬 머신의 현재 디렉토리 내용을 나열할 수 있습니다:
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
또한 로컬 시스템에서 상호 작용할 디렉토리를 변경할 수도 있습니다:
SFTP를 사용하여 파일 전송하기
원격 호스트에서 파일을 다운로드하려면 get
명령을 사용할 수 있습니다:
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
기본적으로 get
명령은 원격 파일을 로컬 파일 시스템의 동일한 이름의 파일로 다운로드합니다.
파일을 다른 이름으로 복사하려면 이름을 지정한 후에 원격 파일을 복사할 수 있습니다:
get
명령은 몇 가지 옵션 플래그도 허용합니다. 예를 들어, 재귀 옵션을 지정하여 디렉터리와 해당 내용 전체를 복사할 수 있습니다:
SFTP에게 적절한 권한과 액세스 시간을 유지하도록 하려면 -P
또는 -p
플래그를 사용합니다:
로컬 파일을 원격 시스템으로 전송하기
원격 시스템으로 파일을 전송하는 방법은 동일하지만 put
명령을 사용합니다:
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
get
과 동일하게 작동하는 동일한 플래그가 put
에 적용됩니다. 따라서 전체 로컬 디렉터리를 복사하려면 put -r
을 실행할 수 있습니다:
파일을 다운로드하거나 업로드할 때 유용한 익숙한 도구 중 하나는 명령 줄 버전과 유사하게 작동하는 df
명령입니다. 이를 사용하여 관심 있는 전송을 완료할 충분한 공간이 있는지 확인할 수 있습니다:
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
주의하십시오. 이 명령에는 로컬 변형이 없지만, !
명령을 사용하여 이를 우회할 수 있습니다.
!
명령은 로컬 셸로 이동하게 해주어 로컬 시스템에서 사용 가능한 모든 명령을 실행할 수 있습니다. 디스크 사용량을 확인하려면 다음을 입력하십시오:
그런 다음
OutputFilesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 595Gi 52Gi 544Gi 9% /
devfs 181Ki 181Ki 0Bi 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% /net
map auto_home 0Bi 0Bi 0Bi 100% /home
다른 로컬 명령도 예상대로 작동합니다. SFTP 세션으로 돌아가려면 다음을 입력하십시오:
이제 SFTP 프롬프트가 다시 표시됩니다.
SFTP를 사용한 간단한 파일 조작
SFTP를 사용하면 파일 시스템 관리를 할 수 있습니다. 예를 들어, 원격 시스템에서 파일의 소유자를 변경할 수 있습니다:
시스템 chmod
명령과 달리, SFTP 명령은 사용자 이름 대신 UID를 사용합니다. SFTP 인터페이스 내에서 적절한 UID를 알 수 있는 내장된 방법이 없습니다.
대신 대부분의 리눅스 환경에서 사용자 이름과 UID를 연결하는 /etc/passwd
파일을 읽을 수 있습니다.
Outputroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .
주의하세요. !
명령을 그 자체로 주지 않고 로컬 셸 명령의 접두사로 사용한 점에 주목하십시오. 이렇게 하면 로컬 머신에서 사용 가능한 모든 명령을 실행할 수 있으며, 이전에 로컬 df
명령과 함께 사용할 수 있었습니다.
UID는 파일의 세 번째 열에 있으며, 콜론 문자로 구분됩니다.
마찬가지로 파일의 그룹 소유자를 변경할 수 있습니다:
다시 말하지만, 원격 시스템의 그룹 목록을 가져오는 내장된 방법은 없습니다. 다음 명령을 사용하여 이를 해결할 수 있습니다:
Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
세 번째 열에는 첫 번째 열의 이름과 관련된 그룹의 ID가 포함됩니다. 이게 바로 우리가 찾는 것입니다.
chmod
SFTP 명령은 원격 파일 시스템에서 일반적으로 작동합니다:
OutputChanging mode on /home/demouser/publicFile
로컬 파일 권한을 조작하는 동등한 명령은 없지만, 로컬 시스템에 복사된 파일의 해당 권한을 설정할 수 있습니다. 이는 umask를 설정하여 수행할 수 있습니다.
lumask
명령으로 이 작업을 수행할 수 있습니다:
OutputLocal umask: 022
이제 모든 일반 파일 다운로드(단, -p
플래그를 사용하지 않는 한)에는 644 권한이 부여됩니다.
SFTP는 또한 로컬 및 원격 시스템에서 디렉토리를 생성할 수 있게 해줍니다. 각각 lmkdir
와 mkdir
입니다.
나머지 파일 명령은 모두 원격 파일 시스템에만 적용됩니다:
이 명령들은 해당 셸 동등 명령의 핵심 동작을 복제합니다. 이러한 작업을 로컬 파일 시스템에서 수행해야 하는 경우 이 명령을 사용하여 셸로 진입할 수 있습니다:
또는 로컬 시스템에서 단일 명령을 실행하려면 명령 앞에 !
를 붙이면 됩니다. 다음과 같이:
SFTP 세션을 종료하려면 exit
또는 bye
를 사용하여 연결을 닫습니다.
결론
SFTP 구문은 현대 쉘 도구보다 훨씬 적지만, 레거시 FTP 구문과의 호환성을 제공하거나 일부 환경의 원격 사용자에게 제한된 기능을 주의 깊게 제한하는 데 유용할 수 있습니다.
예를 들어, 특정 사용자가 SSH 액세스 없이 파일을 전송할 수 있도록 하려면 SFTP를 사용할 수 있습니다. 이 프로세스에 대한 자세한 내용은 쉘 액세스 없이 SFTP 사용하기 튜토리얼을 참조하십시오.
FTP 또는 SCP를 사용하여 전송을 수행하는 것에 익숙한 경우 SFTP를 사용하여 두 가지의 강점을 활용할 수 있습니다. 모든 상황에 적합한 것은 아니지만, 귀하의 레퍼토리에 유연한 도구로써 가치가 있습니다.