Как сделать фиксированный список комманд для пользователя в SSH?
Есть стандартная для большинства дистрибутивов тулза chroot. Ее использует для собитвенных изоляций куча системного софта. Она есть везде и ее не придется устанавливать. 
Создаешь пользователя. Создаешь новую директорию.
В ней создаешь основные системные папки. Одну из папок (например, /home) делаешь пользовательской, то есть меняешь хозяина chown на этого пользователя.
Потом ссылками (команда ln) добавляешь в эти папки все то, к чему хочешь чтобы пользователь и программы запущенные под ним имели доступ. 
Все его сессии запускаешь через chroot.
Не забываем ограничить использование hdd (группа команд quota).
А потом ему можно дать возможность пользоваться хоть менеджером пакетов, даже устанавливая свой софт, юзер ничего не испортит.
Классика хостинга, ёмн. $ man chroot
а для создания кастомного шелла надо можно для java юзать что-то типа spring shell, затем создать запускаемый файл с "java -jar ...." в /bin/ и в конце добавить путь до запускаемого файла в /etc/shells. после этого он будет в списке chsh