Назад | Перейти на главную страницу

SSH туннелирование только доступ

Можно ли настроить ssh (в Linux), чтобы разрешить доступ только для туннелирования? Т.е. пользователь может настраивать туннели, но не может получить файлы оболочки / доступа?

Да, просто используйте /bin/false в качестве оболочки и проинструктируйте пользователя запустить процесс туннелирования SSH без выполнения каких-либо удаленных команд (т.е. -N флаг для OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

В пользовательский файл .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», но другие могут быть полезны, если пользователь должен туннелировать только на определенные серверы.

См. Страницу руководства по sshd, чтобы узнать о дополнительных параметрах authorized_keys файл.

Обратите внимание, что опыт пользователя может выглядеть немного странным: когда они подключатся по ssh, это будет выглядеть так, как будто сеанс завис (поскольку они не получают pty). Все нормально. Если пользователь указал переадресацию портов, например, «-L3306: 192.168.1.10: 3306», переадресация порта все равно будет действовать.

В любом случае, попробуйте.

Предоставьте пользователю оболочку, которая позволяет ему только выходить из системы, например /bin/press_to_exit.sh

#!/bin/bash
read -n 1 -p "Press any key to exit" key

Таким образом, он может оставаться в системе столько, сколько захочет, с активными туннелями, но не выполнять никаких команд. Ctrl-c закрывает соединение.

Назначьте оболочку, которая не позволяет пользователю войти в систему.

например

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

помешает им получить приглашение оболочки и даст им тайм-аут в 60 секунд - если нет активного соединения в течение 60 секунд, он выйдет и тем самым полностью отключит их (увеличьте число в соответствии с требованиями).

Они также не могут выполнить удаленную команду, потому что оболочка им этого не позволяет.

Мое решение - предоставить пользователю, который может только туннелировать, без интерактивной оболочки, чтобы установить эту оболочку в / 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/

​##Create a new user

sudo useradd -m [user]

##Edit /etc/ssh/sshd_config

Match User [user]
   #AllowTcpForwarding yes
   #X11Forwarding no
   #PermitTunnel no
   GatewayPorts yes ##Enable listening on 0.0.0.0
   AllowAgentForwarding no
   PermitOpen localhost:2888 ##specify port
   ForceCommand echo 'This account can only be used for Tunneling'