Ответы:
Да, просто используйте в /bin/false
качестве оболочки и поручите пользователю запустить процесс туннелирования SSH без выполнения какой-либо удаленной команды (т. -N
Е. Флага для OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
оболочка, у вас не будет доступа к оболочке, так как каждый сеанс входа в систему будет немедленно прекращен.
В пользовательском файле .ssh / authorized_keys поместите что-то вроде следующего:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Таким образом, в основном, вы должны находиться перед открытым ключом ssh пользователя, разделенным пробелом. В этом примере соединениям, использующим определенный открытый ключ, будет разрешено выполнять переадресацию порта SSH только на сервер MySQL 192.168.1.10 и веб-сервер 10.0.0.16, и не будет назначена оболочка (no-pty). Вы конкретно спрашиваете об опции «no-pty», но другие также могут быть полезны, если пользователь должен только туннелировать на определенные серверы.
Посмотрите man-страницу для sshd, чтобы узнать больше о параметрах файла авторизованных ключей .
Обратите внимание, что пользовательский опыт может выглядеть немного странно: когда он входит в ssh, это будет выглядеть так, как будто сеанс зависает (так как он не получает pty). Ничего страшного. Если пользователь указал переадресацию порта с помощью, например, «-L3306: 192.168.1.10: 3306», переадресация порта все еще будет действовать.
В любом случае, попробуйте.
no-pty
не предотвращает доступ к оболочке, просто не дает оболочке pty. Он не отображает приглашение (т. Е. «Кажется, что зависает»), но вы все равно можете давать команды просто отлично. Вам нужна command="..."
опция, .ssh/authorized_keys
если вы хотите оттуда ограничить доступ к оболочке.
Дайте пользователю оболочку, которая только позволяет ему выходить из системы, такой как /bin/press_to_exit.sh
#! / Bin / Баш read -n 1 -p «Нажать любую клавишу для выхода»
Таким образом он может оставаться в системе сколько угодно, с активными туннелями, но не запускать никаких команд. Ctrl-c
закрывает соединение
Назначьте оболочку, которая не позволяет пользователю войти в систему.
например
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
будет препятствовать тому, чтобы они получали приглашение оболочки, и давал бы им тайм-аут 60 секунд - если в течение 60 секунд не будет никакого активного соединения, то он выйдет и тем самым полностью их отключит (увеличьте число в соответствии с требованиями).
Они также не могут выполнить удаленную команду, потому что эта оболочка не позволит им.
logout
" на обычном.
/sbin/nologin
, что вы можете настроить с помощью удобного сообщения в /etc/nologin.txt
.
Мое решение состоит в том, чтобы предоставить пользователю, который может только туннелировать, без интерактивной оболочки , установить эту оболочку в / etc / passwd в / usr / bin / tunnel_shell .
Просто создайте исполняемый файл / usr / bin / tunnel_shell с бесконечным циклом .
Кроме того , воспользоваться AllowGroups
и Match Group
опцией.
Полностью объяснено здесь: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
, у него есть доступ к оболочке. Это действительно не решает проблему и является опасным.