Files transferred over shell protocol: Difference between revisions

Content deleted Content added
m Protocol messages: style, fmt.
Tag: nowiki added
 
(18 intermediate revisions by 7 users not shown)
Line 1:
{{short description|Computer protocol}}
{{UnreferencedMore citations needed|date=December 2009}}
 
'''Files transferred over Shell protocol''' ('''FISH''') is a network [[Protocol (computing)|protocol]] that uses [[Secure Shell]] (SSH) or [[Remote Shell]] (RSH) to [[file transfer|transfer files]] between computers and manage remote files.
Line 5 ⟶ 6:
The advantage of FISH is that all it requires on the server-side is an SSH or RSH implementation, [[Unix shell]], and a set of standard [[Unix]] utilities (like [[ls]], [[cat (Unix)|cat]] or [[dd (Unix)|dd]]—unlike other methods of remote access to files via a remote shell, [[Secure copy|scp]] for example, which requires ''scp'' on the server side). Optionally, there can be a special FISH server program (called ''start_fish_server'') on the server, which executes FISH commands instead of Unix shell and thus speeds up operations.
 
The protocol was designed by Czech Linux Kernel Hacker, Pavel Machek, in 1998 for the [[Midnight Commander]] software tool.<ref>[https://github.com/MidnightCommander/mc/blob/master/src/vfs/fish/fish.c File: ''Fish.c'' - via Midnight Commander Official Repository]</ref>
 
== Protocol messages ==
Line 27 ⟶ 28:
 
== Session initiation ==
The client initiates SSH or RSH connection with <{{code>|echo FISH:;/bin/sh</code>|fish}} as the command executed on remote machine. This should make it possible for the server to distinguish FISH connections from normal RSH or SSH.
 
The first two commands sent to the server are <code>FISH</code> and <code>VER</code> to negotiate FISH protocol, its version and extensions.
{{sxhl|2=fish|<nowiki/>
 
#FISH
echo; start_fish_server; echo '### 200'
Line 36 ⟶ 37:
#VER 0.0.2 <feature1> <feature2> <...>
echo '### 000'
}}
 
The server may reply to VER command with a lines like
 
VER 0.0.0 <feature2> <...>
### 200
 
which indicates supported version of the FISH protocol and supported extensions.
 
== Implementations ==
* [[Midnight Commander]]<ref>{{cite web | url=https://github.com/MidnightCommander/mc/blob/master/src/vfs/fish/fish.c | title=Mc/Fish.c at master · MidnightCommander/Mc | website=[[GitHub]] }}</ref>
*[[Midnight Commander]]
* [[Far Manager#Linux, MacOS and BSD version|far2l]]<ref>{{cite web | url=https://github.com/elfmz/far2l/issues/1819 | title=Feature: Consider porting FISH(FIle transfer over SHell filesystem) from Midnight Commander · Issue #1819 · elfmz/Far2l | website=[[GitHub]] }}</ref>
*[[Lftp]]
* [[Lftp]]<ref>{{cite web | url=https://github.com/lavv17/lftp/blob/master/src/Fish.cc | title=LFTP/SRC/Fish.cc at master · lavv17/LFTP | website=[[GitHub]] }}</ref>
*fish:// [[KDE]] [[KIO|kioslave]] (with [[konqueror]], [[Krusader]] or [[Dolphin (software)|Dolphin]])
* fish:// [[KDE]] [[KIO|kioslave]]<ref>{{cite web | url=https://github.com/KDE/kio-extras/blob/master/fish/fish.cpp | title=Kio-extras/Fish/Fish.CPP at master · KDE/Kio-extras | website=[[GitHub]] }}</ref> (with [[konqueror]], [[Krusader]] or [[Dolphin (file manager)|Dolphin]])
* ''tramp-fish.el'' implemented it in [[Emacs TRAMP]] (but might [http://lists.gnu.org/archive/html/tramp-devel/2010-09/msg00001.html have been thrown away] if nobody needed it); Emacs TRAMP in overall has similar goals to FISH: remote access to files through a remote Unix shell.
* fish as [https://github.com/greyltc/tcl-vfs/blob/master/library/template/fishvfs.tcl tcl-vfs]
* FISH was implemented in [[Emacs]] TRAMP some time ago, but support was removed<ref>[https://github.com/emacs-mirror/emacs/commit/03c1ad4351c10ec998410e8d34f52ac4a1a0decd#diff-96ee1cf8a36451f16ddf3f468f6ac74643eeee171d17054ca0c8cbf6653a26a8 related commit in Emacs]</ref><ref>{{cite web | url=https://lists.gnu.org/archive/html/tramp-devel/2010-09/msg00001.html | title=Re: Tramp's fish method }}</ref> (although TRAMP still can use shell connections in a similar way using tramp-sh.el script file)
 
== See also ==
* [[SSHFS]]
* [[SSH File Transfer Protocol]]
 
==References==
{{Reflist}}
 
== External links ==