SSH 프로토콜은 양방향 스트림을 전송할 수있는 보안 터널을 생성하며이 스트림을 사용하여 원하는 두 프로세스를 연결할 수 있습니다.
가장 친숙한 두 프로세스는 쉘 (서버)과 대화식 터미널 에뮬레이터 (클라이언트)입니다. 이것이 서버에 ssh하고 원격 쉘 프롬프트에서 명령을 입력 할 때 사용하는 것입니다.
SCP 는 해당 쉘과 원격 명령 만 사용하여 파일을 전송합니다. SCP에서 클라이언트가 서버에 연결되고 모든 인증 및 권한 부여가 완료되면 클라이언트는 원격 쉘에 다음과 같은 명령을 전송합니다.이 명령은 scp -f myfile.txt
myfile.txt 파일의 내용을 스트림 (클라이언트의)에 기록합니다. 읽기)하거나 scp -t myfile.txt
스트림에서 읽고 MYFILE.TXT에 기록한다.
-f 및 -t ( "from"및 "to"의 경우)가 scp 맨 페이지에없는 것을 알 수 있습니다. 그들은 내부로 간주됩니다. 간단한 승인 체계와 파일 내용을 간단한 헤더로 감싸서 디렉토리를 전송하는 체계가 있습니다. 그러나 대부분 SCP는 파일의 바이트를 SSH 터널에 쓰는 기본적인 문제이므로 SSH가 압축 및 무결성과 같은 복잡한 작업을 처리 할 수 있습니다.
SFTP 는 훨씬 더 복잡한 파일 전송 프로토콜이며 SSH를 통해 다시 터널링됩니다.
SFTP에서 요청과 응답은 모두 "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE"와 같은 이름을 가진 이진 인코딩 패킷입니다.
이 프로토콜의 흥미로운 특징 중 하나는 명령을 파이프 라인 할 수 있으며 응답은 순서에 관계없이 올 수 있다는 것입니다. 이것은 세션이 응답을 기다리는 데 시간이 덜 걸리고 다양한 속도의 데이터 소스를 사용하여 한 서버에서 동시 전송을 최적화 할 수있는 기회가 있다는 것을 의미 할 수 있습니다.
SFTP에는 SCP가 해결하지 못하는 많은 일을하라는 명령이 있습니다. 삭제, 이름 바꾸기, 자르기, 이동 등
모든 세부 사항은 IETF 초안 에서 사용할 수 있습니다 .
새로운 SSH 패키지는 사용자 scp
바이너리를 SFTP 바이너리에 대한 심볼릭 링크로 대체한다는 점은 주목할 가치가 있습니다. 이 SFTP는 scp의 모양과 느낌을 갖지만 커버 아래에서는 SFTP 프로토콜을 사용합니다.
인용 -O'Reilly SSH : 보안 셸, 결정적인 가이드 , 섹션 5.7 "서브 시스템":
경고 : sshd2_config에서 서브 시스템 -sftp 행을 제거하지 마십시오. scp2 및 sftp가 작동해야합니다. 내부적으로 두 프로그램 모두 ssh2 -s sftp를 실행하여 파일 전송을 수행합니다.
물고기 는 흥미로운 역사입니다. SSH를 통해 파일을 전송하려고하지만 원격 시스템에 SCP가 없다고 가정 해 봅시다. 또는 SCP보다 더 정교한 파일 작업을 원하지만 원격 시스템에는 SFTP가 없습니다. 오늘날에는 이러한 시나리오 중 어느 것도 가능하지는 않지만 물고기가 발명되었을 때였습니다.
클라이언트 Midnight Commander 의 개발자는 자신 만의 솔루션을 만들기 시작했습니다. 원칙적으로 scp와 비슷하지만 더 많은 명령이 있습니다. 클라이언트는 다음과 같은 명령을 보냅니다.
#RETR /some/name
ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
Fish 서버와 대화 중이라면 #RETR
명령 을 해석합니다 . 그러나 원격 서버에 Fish 서버가 설치되어 있지 않으면 명령은 셸에서 해석됩니다. 먼저 주석 다음 파일에 대한 정보를 인쇄하는 명령과 일부 마커로 둘러싸인 파일 내용이 이어집니다.
실제로 scp 나 fish가 없으면 클라이언트는 scp에 상응하는 "자체"롤링을 수행하지만 이름을 바꾸거나 이동, 자르기 등을 위해 쉘 명령을 동일하게 보낼 수 있습니다.
물고기의 세부 사항은 여기 Midnight Commander 소스에 있습니다 .
이것이 최종 사용자 관점에서 무엇을 의미합니까?
- 이전 SSH 서버 구현은 scp를 지원하지만 SFTP는 지원하지 않습니다. SFTP 클라이언트를 사용할 수 없습니다
- 성능, 안정성 및 유연성을 위해 SFTP 사용
- "scp"클라이언트가 위장한 SFTP 클라이언트 일 수 있습니다 ( 인용 필요 ).
- 물고기는 틈새 환경에서 유용 할 수 있지만 더 표준 SFTP를 사용하십시오.