Files transferred over shell protocol
Шаблон:Краткое описание Шаблон:Недостаточно источников
Файлы, передаваемые по протоколу Shell (FISH) — это сетевой протокол, который использует Secure Shell (SSH) или Remote Shell (RSH) для передачи файлов между компьютерами и управления удаленными файлами.
Преимущество FISH заключается в том, что на серверной стороне требуется только реализация SSH или RSH, Unix оболочка, и набор стандартных Unix утилит (таких как ls, cat или dd — в отличие от других методов удаленного доступа к файлам через удаленную оболочку, scp, например, который требует scp на серверной стороне). По желанию на сервере может быть специальная серверная программа FISH (называемая start_fish_server), которая выполняет команды FISH вместо Unix оболочки и таким образом ускоряет операции.
Протокол был разработан чешским хакером Linux ядра, Павелом Мачеком, в 1998 году для инструмента Midnight Commander.[1]
Сообщения протокола
Клиент отправляет текстовые запросы следующего вида:
- FISH_COMMAND аргументы...
эквивалентные команды оболочки, которые могут быть многострочными
Команды Fish все определены, эквиваленты оболочки могут различаться. Команды Fish всегда имеют приоритет: от сервера ожидается выполнение команды Fish, если он её понимает. Если не понимает, он может попробовать выполнить команду оболочки. Когда специальной серверной программы нет, Unix оболочка игнорирует команду Fish как комментарий и выполняет эквивалентные команды оболочки.
Ответы сервера многострочны, но всегда заканчиваются xyz<дополнительный текст>
строкой. ###
— это префикс для обозначения этой строки, xyz
— это код возврата.
Коды возврата являются надмножеством тех, которые используются в FTP.
Коды 000 и 001 являются специальными, их значение зависит от наличия вывода сервера перед конечной строкой.
Инициация сессии
Клиент инициирует SSH или RSH соединение с echo FISH:;/bin/sh
как командой, выполняемой на удаленной машине. Это должно позволить серверу отличать соединения FISH от обычных RSH или SSH.
Первые две команды, отправленные серверу, — это FISH
и VER
для согласования протокола FISH, его версии и расширений.
- FISH
echo; start_fish_server; echo '### 200'
- VER 0.0.2 <функция1> <функция2> <...>
echo '### 000'
Сервер может ответить на команду VER строками вроде VER 0.0.0 <функция2> <...> 200
что указывает на поддерживаемую версию протокола FISH и поддерживаемые расширения.
Реализации
tramp-fish.el реализовал это в Emacs TRAMP (но, возможно, был отброшен, если никому не нужен); Emacs TRAMP в целом имеет похожие цели на FISH: удаленный доступ к файлам через удаленную Unix оболочку.
См. также
SSHFS SSH File Transfer Protocol
Ссылки
Внешние ссылки
README.fish от Midnight Commander