Відповіді:
Так, просто використовуйте /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, у них є доступ до оболонки. Це дійсно не вирішує проблему і є небезпечним.