guest@6admin.io:~$

SSH: where is the fish?

The fish protocol (Files transferred over SHell) is a KDE invention: it encapsulates shell commands in an SSH connection to browse and transfer files as if it were a network mount. Konqueror does it natively: type fish://user@server/home/user in the address bar and the remote filesystem appears in the file browser.

What fish does

Fish is not a mount (no FUSE, no kernel module): the client sends shell commands (ls, cat, cp) over SSH and parses the result. The server needs nothing special: just a POSIX shell. The client builds the commands, sends them over the SSH channel and presents the result as a filesystem.

To list a directory:

# What fish sends (simplified):
echo -e "### 2008\ncd /home/user && ls -l --time-style='+%Y%m%d' 2>/dev/null\necho -e '### 200'"

The ### 200 is the delimiter that fish parses to separate valid commands from errors.

What fish does not do

Fish does not mount the filesystem: it cannot be used by a non-KDE process (no cp, no find, no grep). It does not work outside KDE. It is slow on filesystems with many files (every listing is an SSH round-trip).

For a real mount, there is sshfs (next article). For a one-off transfer, there is scp. For graphical browsing in KDE, there is fish.