it-swarm-ru.tech

В чем разница между протоколами SFTP, SCP и FISH?

Раньше я думал, что SCP - это инструмент для копирования файлов по SSH, а копирование файлов по SSH называется SFTP, что само по себе является синонимом FISH.

Но теперь, когда я искал плагин Total Commander для этого в Windows, я заметил, что на его странице написано: "Разрешает доступ к удаленным серверам через безопасный FTP (FTP через SSH). Требуется SSH2. Это НЕ то же самое". как SCP! ".

Если это не то же самое, тогда что я неправильно понимаю?

67
Ivan

SFTP это не протокол FTP через ssh, а расширение протокола SSH, включенное в SSH2 (и некоторые реализации SSH1). SFTP - это протокол передачи файлов, похожий на FTP, но использующий протокол SSH в качестве сетевого протокола (и он выигрывает от использования SSH для обработки аутентификации и шифрования).

SCP предназначен только для передачи файлов и не может выполнять другие действия, такие как создание списка удаленных каталогов или удаление файлов, что делает SFTP.

FISH, по-видимому, еще один протокол , который может использовать SSH или RSH для передачи файлов.

63
jsbillings

Протокол SSH создает безопасный туннель, через который вы можете передавать двунаправленный поток, и вы можете использовать этот поток для соединения любых двух процессов, которые вам нравятся.

Наиболее знакомыми двумя процессами будут Shell (на сервере) и интерактивный эмулятор терминала (на клиенте). Это то, что вы используете, когда вы подключаетесь к серверу и вводите команды в командной строке удаленной оболочки.

[~ # ~] scp [~ # ~] - передача файла осуществляется только с помощью этой оболочки и удаленной команды. В SCP, когда клиент подключен к серверу и все аутентификации и авторизации выполнены, клиент отправляет удаленной командной консоли команду, подобную scp -f myfile.txt, который просто записывает содержимое файла myfile.txt в поток (для чтения клиентом) или scp -t myfile.txt, который читает из потока и пишет в myfile.txt.

Вы заметите, что -f и -t (для "from" и "to") не находятся в man-страницах 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.

Цитата - O'Reilly SSH: Безопасная оболочка, Полное руководство, раздел 5.7 "Подсистемы":

ВНИМАНИЕ: Не удаляйте строку подсистемы-sftp из sshd2_config: это требуется для работы 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'

Если вы разговариваете с рыбным сервером, он будет интерпретировать #RETR команда. Однако если на удаленном сервере не установлен сервер Fish, команды будут интерпретироваться командной оболочкой. Сначала комментарий, затем команда, которая печатает информацию о файле, а затем содержимое файла, заключенное в некоторые маркеры.

По сути, в отсутствие scp или fish клиент "свернул" свой собственный scp-эквивалент, но он также может отправлять команды Shell для переименования, перемещения, усечения и т.д.

Подробная информация о рыбе находится в источнике Midnight Commander здесь .

Что это все означает с точки зрения конечного пользователя?

  • старые реализации SSH-сервера поддерживают scp, но не SFTP; вы не можете использовать клиент SFTP с этими
  • Используйте SFTP для производительности, надежности и гибкости
  • Ваш "scp" клиент может быть замаскированным клиентом SFTP ( Требуется цитата)
  • Рыба может быть полезна в нишевых обстоятельствах, но в противном случае используйте более стандартный 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 выиграл не работает).

Для копирования FISH требуется оболочка (например, sh/rsh), и, следовательно, требуется полный SSH-доступ к машине, я бы предположил, что ее будет сложнее защитить (я не могу объективно это прокомментировать, как мне никогда не приходилось).

Где возможно, я бы рекомендовал SFTP, scp, FISH (в таком порядке).

Wikipedia FISH Article

11
N J