Відповіді:
Так, просто використовуйте /bin/false
як оболонку та доручіть користувачеві розпочати процес тунелювання SSH, не виконуючи жодної віддаленої команди (тобто -N
прапор для OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
оболонка, ви не матимете доступу до оболонки, оскільки кожен сеанс входу буде негайно завершений.
У файл .ssh / autoriziran_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, щоб отримати додаткові параметри для файлу санкціонованих_ ключів .
Зауважте, що досвід користувача може виглядати дещо дивним: коли вони забиваються, це виглядатиме як сеанс зависає (оскільки вони не отримують шкода). Все добре. Якщо користувач вказав переадресацію портів, наприклад, "-L3306: 192.168.1.10: 3306", переадресація порту все ще буде діяти.
У будь-якому випадку, спробуйте.
no-pty
не перешкоджає доступу до оболонки, вона просто не дає оболонці піти. Він не відображає підказку (тобто "здається, висить"), але ви все одно можете давати команди просто чудово. Вам потрібна command="..."
опція, .ssh/authorized_keys
якщо ви хочете обмежити доступ до оболонки звідти.
Дайте користувачеві оболонку, яка дозволяє лише виходити з системи, такі як /bin/press_to_exit.sh
#! / бін / баш 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
, у них є доступ до оболонки. Це дійсно не вирішує проблему і є небезпечним.