Files transferred over shell protocol
Files transferred over shell protocol (FISH) — сетевой протокол, использующий SSH или 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, если он её понимает. Если не понимает, он может попробовать выполнить соответствующие команды оболочки. Когда 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 строками, содержащими поддерживаемую версию протокола FISH и поддерживаемые расширения:
VER 0.0.0 <функция2> <...>
### 200
Реализации
[править | править код]См. также
[править | править код]Ссылки
[править | править код]- ↑ Файл: Fish.c - через официальный репозиторий Midnight Commander . Дата обращения: 12 сентября 2023. Архивировано 15 ноября 2022 года.
- ↑ Feature: Consider porting FISH(FIle transfer over SHell filesystem) from Midnight Commander · Issue #1819 · elfmz/far2l · GitHub . Дата обращения: 14 сентября 2023. Архивировано 25 сентября 2023 года.