It looks like fossil is relying on some sh(1) or bash(1) specific semantic when it comes to syncing via ssh. Maybe using something like:

-c 'exec

or threads?  Here's what's currently happening with tcsh:

<verbatim>% fs remote-url
password for usr:

% fs pull
Server:
ssh -p 22 -t -e none -p 4321
Pseudo-terminal will not be allocated because stdin is not a terminal.
fossil: ssh connection failed: [Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.]
Killed by signal 2.
Exit 1
% fs set ssh-command 'ssh -p 4321 -T -e none'
% fs pull
Server:
ssh -p 22 -T -e none -p 4321
fossil: ssh connection failed: [Warning: no access to tty (Bad file descriptor).]
Killed by signal 2.
Exit 1
% fs set ssh-command
ssh-command          (local)  ssh -p 4321 -T -e none
% fs sync
Server:
ssh -p 22 -T -e none -p 4321
fossil: ssh connection failed: [Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.]
Killed by signal 2.
Exit 1</verbatim>

Both client and server are running the same version of fossil.  When I change the shell to sh, I get the following output:

<verbatim>% fs sync
Server:
ssh -p 22 -T -e none -p 4321
                Bytes      Cards  Artifacts     Deltas
Sent:            4005         85          0          0
fossil: server says: 501 Not Implemented
Total network traffic: 2341 bytes sent, 0 bytes received
Closing SSH tunnel: Killed by signal 2.</verbatim>

When I sync via http over an ssh tunnel, things work just fine:

<verbatim>% fs remote-url
password for usr:

% fs sync
Server:
                Bytes      Cards  Artifacts     Deltas
Sent:            4005         85          0          0
Received:        3820         83          0          0
Total network traffic: 2368 bytes sent, 1275 bytes received</verbatim>