Я пытаюсь ограничить пользователя ssh от выполнения нежелательных команд через ssh с удаленного хоста. Для этого я использую принудительную команду в файле authorized_keys, которая позволяет пользователю ssh выполнять только определенную команду.
Если я не установил это, я могу войти в систему через ssh и sftp.
Как я могу отличить удаленное соединение через ssh или sftp в сценарии оболочки?
Команда, которую я ожидаю, выглядит следующим образом, и они оба должны работать: -
ssh ssh-user @ имя хоста test_scripts.sh
sftp ssh-user @ имя хоста
Я использовал переменную $ TERM, чтобы различать ssh и sftp. Если это sftp, то $ TERM вернет dumb. Но когда мы передаем команду через ssh, тогда также $ TERM возвращается тупой. Есть идеи, как отличить?
Добавление более подробной информации к вопросу: -
если [$ TERM = 'тупой']; затем
$ SSH_ORIGINAL_COMMAND # Если sftp, выполните это
еще
echo "Это ssh" # Если ssh, выполните это
фи
Приведенный выше сценарий вызывается принудительной командой. Когда я подключаюсь удаленно через ssh, я получаю ожидаемое сообщение: «Это ssh».
ssh ssh-user @ hostname Это ssh
И когда я пытаюсь подключиться через sftp, то, как и ожидалось, условие if выполнено, и я получаю приглашение sftp.
sftp ssh-user @ имя хоста sftp>
Но когда я передаю команду вместе с командой ssh, тогда $ TERM устанавливается на немой. Итак, условие if выполнено.
ssh ssh-user @ имя хоста ls
Мне нужно различать два последних метода в приведенном выше сценарии. Может ли кто-нибудь помочь мне в этом?
Посмотри на Ограниченный Баш - обычно в / bin / rbash. Я использовал это недавно, чтобы добиться чего-то похожего на то, что вы пытаетесь сделать (после того, как вы пукнули с chroot-тюрьмами и ничего не добились).
Для пользователей, которых я хотел ограничить, я установил их терминал на / bin / rbash и их ПУТЬ на $ {HOME} / bin. Затем я создал символическую ссылку на все команды, которые я хотел, чтобы им было разрешено запускать в их каталоге $ {HOME} / bin. Я не думаю, что он на 100% надежен, но с моими пользователями он помог.
Я не тестировал его для команд, которые отправляются как часть командной строки SSH, но я не понимаю, почему он не будет работать, если для оболочки пользователя установлено значение rbash.