SFTP, SCP 및 FISH 프로토콜의 차이점은 무엇입니까?


59

필자는 SCP가 SSH를 통해 파일을 복사하는 도구라고 생각했으며 SSH를 통해 파일을 복사하는 것을 SFTP라고하며 이는 자체적으로 FISH와 동의어입니다.

그러나 Windows에서이 작업을 수행하기 위해 Total Commander 플러그인을 찾고 있었을 때 페이지에서 "보안 FTP (SSH를 통한 FTP)를 통해 원격 서버에 액세스 할 수 있습니다. SSH2가 필요합니다."라는 메시지가 표시됩니다. SCP로! "

동일하지 않으면 내가 무엇을 오해하고 있습니까?


5
이것은 이전 질문 의 확장입니다 . (@Ivan :이 점을 언급하면 ​​도움이 될 것입니다.)
Gilles

답변:


57

SFTP 는 ssh를 통한 FTP 프로토콜이 아니라 SSH2 (및 일부 SSH1 구현)에 포함 된 SSH 프로토콜의 확장입니다. SFTP는 FTP와 유사한 파일 전송 프로토콜이지만 SSH 프로토콜을 네트워크 프로토콜로 사용합니다 (인증 및 암호화를 처리하기 위해 SSH를 그대로 두는 이점이 있습니다).

SCP는 파일 전송만을위한 것이며 SFTP가 수행하는 원격 디렉토리 목록 표시 또는 파일 제거와 같은 다른 작업을 수행 할 수 없습니다.

FISH 는 SSH 또는 RSH를 사용하여 파일을 전송할 수있는 또 다른 프로토콜 인 것 같습니다.


11
추가 가치 : FTPS (FTP over TLS)도 있습니다.
mikemaccana

3
@mikemaccana FTPES를 추가 할 수 있습니다 마녀는 일반 ftp 연결을 통해 ftp를 명시 적으로 사용할 수 있습니다
Kiwy

26

SSH 프로토콜은 양방향 스트림을 전송할 수있는 보안 터널을 생성하며이 스트림을 사용하여 원하는 두 프로세스를 연결할 수 있습니다.

가장 친숙한 두 프로세스는 쉘 (서버)과 대화식 터미널 에뮬레이터 (클라이언트)입니다. 이것이 서버에 ssh하고 원격 쉘 프롬프트에서 명령을 입력 할 때 사용하는 것입니다.

SCP 는 해당 쉘과 원격 명령 만 사용하여 파일을 전송합니다. SCP에서 클라이언트가 서버에 연결되고 모든 인증 및 권한 부여가 완료되면 클라이언트는 원격 쉘에 다음과 같은 명령을 전송합니다.이 명령은 scp -f myfile.txtmyfile.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를 사용하십시오.

20

간단히 말해 :

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 

1
그러나 sftpscp원격 쉘에서 기본적인 유닉스 utuilities를 사용 FISH 달리 서버 측에서 특별 프로그램이 필요합니다.
imz-Ivan Zakharyaschev

FISH의 설명에 따르면 FISH의 주목할만한 특징은 원격 측에서 특별한 것을 필요로하지 않는다는 것 scp입니다 (scp 또는 sftp-server 와 같은 서버 프로그램 없음 ). 그리고 원격 측이 "제한된"유닉스 인 경우, 원하는 것을 설치할 수없는 경우가 있습니다 : WiFi를 통해 SSH를 통해 파일을 안드로이드로 전송하기 위해 rpush-cat 스크립트 세트를 작성했습니다 -아마도 FISH 고객이 일할 것입니다. ( tramp-fish.el이맥스에서도 가능하다 : stat안드로이드에는 없었기 때문에 일반 TRAMP 클라이언트가 작동하지 않았다 .)
imz-Ivan

2
scp클라이언트 측뿐만 아니라 서버 측에서도 어떻게 필요한지 자세히 설명해 주 시겠습니까? 빠른 Google 검색으로 scp서버 쪽에서도 필요한 것을 찾을 수 없었습니다 .
Johannes Bittner

11

FISH와 SFTP는 비슷하며 SSH를 통해 작동하는 것처럼 관찰되었으므로 SFTP는 전송을 용이하게하기 위해 SSH 서버에서 특정 지원 및 구성이 필요하지만 조금 더 안전하며 SysAdmins가 SFTP 만 허용합니다 (이 상황에서 FISH won) 작동하지 않습니다).

FISH에는 복사 할 쉘 (예 : sh / rsh)이 필요하므로 머신에 대한 전체 SSH 액세스가 필요하므로 보안이 더 어려울 것이라고 생각합니다 (필자는 결코 객관적으로 언급 할 수 없습니다).

가능하다면 SFTP, scp, FISH (순서대로)를 추천합니다.

Wikipedia FISH 기사


링크 된 설명에 따르면 FISH의 주목할만한 기능은 원격 측에서 특별한 것을 필요로하지 않는다는 것 scp입니다 (scp 또는 sftp-server 와 같은 서버 프로그램 없음 ). 그리고 원격 측이 "제한된"유닉스 인 경우, 원하는 것을 설치할 수없는 경우가 있습니다 : WiFi를 통해 SSH를 통해 파일을 안드로이드로 전송하기 위해 rpush-cat 스크립트 세트를 작성했습니다 -아마도 FISH 고객이 일할 것입니다. ( tramp-fish.el이맥스에 너무 수 : 때문에 일반 TRAMP 클라이언트가 작동하지 않았다 stat안드로이드에 없었다.)
IMZ - 이반 Zakharyaschev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.