저는 SCP가 SSH를 통해 파일을 복사하는 도구라고 생각했는데, SSH를 통해 파일을 복사하는 것을 SFTP라고 부르는데, 그 자체가 FISH의 동의어입니다.
하지만 이제 이 작업을 수행하기 위해 Windows에서 Total Commander 플러그인을 찾고 있을 때 해당 페이지에 "보안 FTP(FTP over SSH)를 통해 원격 서버에 대한 액세스를 허용합니다. SSH2가 필요합니다. 이것은 SCP와 다릅니다"라고 표시되어 있는 것을 발견했습니다! ".
다르다면 제가 뭘 잘못 이해한 걸까요?
답변1
SFTPssh 기반의 FTP 프로토콜이 아니라 SSH2(및 일부 SSH1 구현)에 포함된 SSH 프로토콜의 확장입니다. SFTP는 FTP와 유사한 파일 전송 프로토콜이지만 SSH 프로토콜을 네트워크 프로토콜로 사용합니다(SSH가 인증 및 암호화를 처리하는 이점이 있음).
SCP는 파일 전송에만 사용되며 원격 디렉터리 나열, 파일 삭제 등 다른 작업을 수행할 수 없지만 SFTP는 이러한 작업을 수행할 수 있습니다.
물고기인 것 같다또 다른 합의가 있습니다SSH 또는 RSH를 사용하여 파일을 전송할 수 있습니다.
업데이트(2021/03/09): 릴리스 노트에 따름오픈SSH 8.0/8.0p1 (2019-04-17):
이것SCP프로토콜은 오래되고 유연성이 없으며 수정하기가 쉽지 않습니다. 파일 전송에는 sftp 및 rsync와 같은 최신 프로토콜을 사용하는 것이 좋습니다.
답변2
SSH 프로토콜은 양방향으로 스트리밍할 수 있는 보안 터널을 생성하며, 이 스트림을 사용하여 원하는 두 프로세스를 연결할 수 있습니다.
가장 친숙한 두 가지 프로세스는 셸(서버)과 대화형 터미널 에뮬레이터(클라이언트)입니다. 이는 SSH를 통해 서버에 연결하고 원격 쉘 프롬프트에서 명령을 입력할 때 사용하는 것입니다.
SCP이 셸과 원격 명령만 사용하여 파일 전송을 완료할지 여부입니다. SCP에서 클라이언트가 서버에 연결되고 모든 인증 및 권한 부여가 완료되면 클라이언트는 유사한 명령을 원격 셸로 보냅니다. scp -f myfile.txt
이는 단순히 myfile.txt 파일의 내용을 스트림에 씁니다(클라이언트 읽기용). 또는 scp -t myfile.txt
스트림에서 읽고 myfile.txt에 씁니다.
scp 맨페이지에는 -f 및 -t("from" 및 "to"에 대한)가 없음을 알 수 있습니다. 내부로 간주됩니다. 경량 승인 체계와 간단한 헤더에 파일 내용을 래핑하여 디렉터리를 전송하는 체계가 있습니다. 그러나 대부분의 경우 SCP의 기본 작업은 파일의 바이트를 SSH 터널에 쓰고 SSH가 압축 및 무결성의 복잡성을 처리하도록 하는 것입니다.
SFTP이는 SSH를 통해 터널링되는 보다 복잡한 파일 전송 프로토콜입니다.
SFTP에서 요청과 응답은 "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA" 및 "SSH_FXP_CLOSE"와 같은 이름을 가진 이진 인코딩된 데이터 패킷입니다.
이 프로토콜의 흥미로운 특징은 명령을 파이프라인으로 연결할 수 있고 응답이 어떤 순서로든 올 수 있다는 것입니다. 이는 세션이 응답을 기다리는 데 더 적은 시간을 소비한다는 것을 의미할 수 있으며, 속도가 다른 데이터 소스를 사용하는 한 서버에서 동시 전송을 최적화할 수 있는 기회가 있습니다. 물론 이러한 기회가 어느 정도 활용되는지는 알 수 없습니다.
SFTP에는 삭제, 이름 바꾸기, 자르기, 이동 등과 같이 SCP가 할 수 없는 많은 작업을 수행할 수 있는 명령이 있습니다.
모든 세부 사항은 다음에서 확인할 수 있습니다.IETF 초안.
scp
최신 SSH 패키지는 사용자 바이너리를 SFTP 바이너리에 대한 심볼릭 링크로 대체한다는 점은 주목할 가치가 있습니다 . 이 SFTP는 scp의 모양과 느낌을 가지고 있지만 실제로는 SFTP 프로토콜을 사용합니다.
소환——오라일리SSH: Secure Shell, 최종 가이드, 섹션 5.7 “하위 시스템”:
경고: sshd2_config에서 subsystem-sftp 행을 제거하지 마십시오. scp2 및 sftp가 작동하려면 이 행이 필요합니다. 내부적으로 두 프로그램 모두 ssh2 -s sftp를 실행하여 파일 전송을 수행합니다.
물고기흥미로운 역사입니다. SSH를 통해 파일을 전송하고 싶지만 원격 시스템에 SCP가 없다고 가정해 보겠습니다. 또는 SCP보다 더 복잡한 파일 작업을 수행하고 싶지만 원격 시스템에 SFTP가 없을 수도 있습니다. 두 시나리오 모두 오늘날에는 발생할 가능성이 없지만 Fish가 발명되었을 때 발생했습니다.
그래서 클라이언트 개발자는자정 사령관자신만의 솔루션을 만들어 보세요. 원칙적으로 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에 상응하는 "자체 실행"을 수행했지만 이름 바꾸기, 이동, 자르기 등의 쉘 명령을 보낼 수도 있습니다.
Fish에 대한 자세한 내용은 Midnight Commander 소스 코드를 참조하세요.여기.
최종 사용자 관점에서 이것이 무엇을 의미합니까?
- 이전 SSH 서버 구현은 scp를 지원하지만 SFTP는 지원하지 않으며 SFTP 클라이언트를 사용할 수 없습니다.
- SFTP를 통해 성능, 안정성, 유연성 향상
- 귀하의 "scp" 클라이언트는 변장한 SFTP 클라이언트일 수 있습니다(인용이 필요합니다)
- Fish는 특정 상황에서 유용할 수 있지만 그렇지 않은 경우에는 보다 표준적인 SFTP를 사용합니다.
답변3
간단히 말해서:
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)
답변4
FISH와 SFTP는 관찰된 바와 같이 유사하며 둘 다 SSH를 통해 작동합니다. SFTP는 전송을 용이하게 하기 위해 SSH 서버의 특정 지원과 구성이 필요하지만 조금 더 안전하며 시스템 관리자가 SFTP만 허용할 수 있습니다(이 경우 다운됨). , FISH가 승리함) 작동하지 않음).
FISH를 복사하려면 쉘(예: sh/rsh)이 필요하므로 시스템에 대한 전체 SSH 액세스가 필요합니다. 보안이 더 어려울 것이라고 생각합니다(해본 적이 없기 때문에 이에 대해 객관적으로 언급할 수 없습니다).
가능하다면 SFTP, scp, FISH(순서대로)를 사용하는 것이 좋습니다.