Files transferred over shell protocol

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Unxed (обсуждение | вклад) в 19:35, 12 сентября 2023 (Реализации). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

Файлы, передаваемые по протоколу Shell (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, его версии и расширений.

  1. FISH

echo; start_fish_server; echo '### 200'

  1. VER 0.0.2 <функция1> <функция2> <...>

echo '### 000'

Сервер может ответить на команду VER строками вроде VER 0.0.0 <функция2> <...> 200

что указывает на поддерживаемую версию протокола FISH и поддерживаемые расширения.

Реализации

Проект tramp-fish.el подготовил реализацию FISH для Emacs TRAMP (но, возможно, был отклонён за ненадобностью); Emacs TRAMP в целом имеет цели, схожие с целями FISH: удаленный доступ к файлам через удаленную Unix оболочку.

См. также

Ссылки

Шаблон:Список литературы

Внешние ссылки

   README.fish от Midnight Commander
  1. Файл: Fish.c - через официальный репозиторий Midnight Commander