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

Как я могу отличить ssh-соединение от sftp-соединения?

Я пытаюсь ограничить пользователя 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.