Протокол SSH создает безопасный туннель, через который вы можете передавать двунаправленный поток, и вы можете использовать этот поток для соединения любых двух процессов, которые вам нравятся.
Наиболее знакомые два процесса - это оболочка (на сервере) и эмулятор интерактивного терминала (на клиенте). Это то, что вы используете, когда вы подключаетесь к серверу и вводите команды в командной строке удаленной оболочки.
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 .
Стоит отметить, что более новые пакеты 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-эквивалент, но он также может отправлять команды оболочки для переименования, перемещения, усечения и т. Д.
Подробная информация о рыбе находится в источнике Midnight Commander здесь .
Что это все означает с точки зрения конечного пользователя?
- старые реализации SSH-сервера поддерживают scp, но не SFTP; Вы не можете использовать клиент SFTP с этими
- Используйте SFTP для производительности, надежности и гибкости
- Ваш "scp" клиент может быть замаскированным SFTP-клиентом ( требуется цитирование )
- Рыба может быть полезна в нишевых обстоятельствах, но в противном случае используйте более стандартный SFTP.