Acho que você pode conseguir isso configurando o shell de login do usuário para algo muito restrito, por exemplo, algo como " Sleep Dummy Shell ". Citando o site,
This is a simple do-nothing, sleep-forever program that can be used as a login shell (in Linux or Unix) to keep the connection open but without interactive shell. We use it to create SSH accounts for users who will only use them for SSH-tunneling; to create an encrypted tunnel to our servers [...]
Most restricted shells still allow execution of local commands from the SSH account. Setting the account shell to something like
/bin/false
(or any other simple programs) usually won't work because the tunnel is closed as soon as the program finish its execution. Sleep Dummy Shell just sleeps until its execution is terminated by the user or the tunnel is closed.
Você tem a idéia, um programa simples faz parte do truque, sleepshell.c
tem ~ 20 linhas de C.
Não tenho certeza se isso já é seguro o suficiente , ou seja, o que isso significa para usar ssh <server> /bin/bash
ou similar, por exemplo.
Veja esta resposta (por michael-n) para mais dicas e informações.