it-swarm-ko.tech

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

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

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

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

67
Ivan

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

SCP는 파일을 전송하기위한 목적으로 SFTP가 수행하는 원격 디렉토리 나열 또는 파일 제거와 같은 다른 작업을 수행 할 수 없습니다.

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

63
jsbillings

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 Draft 에 있습니다.

새로운 SSH 패키지는 사용자 scp 바이너리를 SFTP 바이너리에 대한 심볼릭 링크로 대체한다는 점은 주목할 가치가 있습니다. 이 SFTP는 scp의 모양과 느낌을 갖지만 커버 아래에서는 SFTP 프로토콜을 사용합니다.

Citation-O'Reilly SSH : 보안 쉘, 결정적인 안내서, 섹션 5.7 "서브 시스템":

경고 : sshd2_config에서 서브 시스템 -sftp 행을 제거하지 마십시오. scp2 및 sftp가 작동해야합니다. 내부적으로 두 프로그램 모두 ssh2 -s sftp를 실행하여 파일 전송을 수행합니다.

Fish 는 흥미로운 역사입니다. SSH를 통해 파일을 전송하려고하지만 원격 시스템에 SCP가 없다고 가정 해 봅시다. 또는 SCP보다 더 정교한 파일 작업을 원하지만 원격 시스템에는 SFTP가 없습니다. 오늘날에는 이러한 시나리오 중 어느 것도 가능하지는 않지만 Fish가 발명되었을 때 그랬습니다.

따라서 클라이언트 개발자 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에 상응하는 "자체"롤링을 수행하지만 이름 바꾸기, 이동, 자르기 등을 위해 쉘 명령을 동일하게 보낼 수 있습니다.

물고기의 세부 사항은 자정 사령관 소스 여기 에 있습니다.

이것이 최종 사용자 관점에서 무엇을 의미합니까?

  • 이전 SSH 서버 구현은 SFTP가 아닌 scp를 지원합니다. SFTP 클라이언트를 사용할 수 없습니다
  • 성능, 안정성 및 유연성을 위해 SFTP 사용
  • "scp"클라이언트가 위장한 SFTP 클라이언트 일 수 있습니다 (Citation needed)
  • 물고기는 틈새 환경에서 유용 할 수 있지만 더 표준 SFTP를 사용하십시오.
34
slim

간단히 말해 :

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) 
21
c2h2

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

FISH는 복사하기 위해 셸 (예 : sh/rsh)이 필요하므로 머신에 대한 전체 SSH 액세스가 필요하므로 보안이 더 어려울 것이라고 생각합니다 (필요하지 않은 객관적인 의견은 없습니다).

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

Wikipedia FISH Article

11
N J