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

Запретить SSH-соединение с сообщением

Я хотел бы разрешить только определенным хостам подключаться к моему серверу через SSH, а остальные отклонить дружественным сообщением об ошибке. Авторизованные пользователи системы, как правило, не имеют технического образования и получают доступ к системе через Filezilla.

Я думал, что смогу сделать это с помощью TCP Wrappers, но когда я ввожу следующее в свой hosts.deny, клиент просто получает сообщение об ошибке "ssh_exchange_identification: соединение закрыто удаленным хостом"

sshd : ALL \
  : twist /bin/echo "Sorry, but your host is not allowed to connect to this server." \
  : deny

Я наткнулся на сценарий, SSH Twist, который, казалось, решил эту проблему, но я просто вижу ту же ошибку на клиенте.

Что бы это ни стоило, я тестирую RHEL 6.1 с OpenSSH 5.3p1.

SSH Twist выглядит чем-то вроде взлома, и я бы не стал делать ставку на его работу со всеми sshd версии - он делает предположение о том, что он может отправить во время установления сеанса, что не обязательно верно.

Это немного некрасиво, но вы можете сделать что-то подобное в sshd_config:

Match Host allowedhost1
Match Host allowedhost2
# one for each host (or hostname pattern or address range) permitted
# no commands in them, just the match entries
# this just makes sure they don't fall into the following catch-all

Match Host *
    Banner /etc/ssh/refuse_msg
    DenyUsers *

В «Аналогии с ответом geekosaur» я в конце концов пришел к следующему решению: (мне нужно было сообщение не для разных хостов, а для разных пользователей, но принцип должен быть тот же.)

Match User *,!user1,!user2,!root
    Banner /etc/ssh/refuse_msg
    ForceCommand echo

Я не заставил ForceCommand работать с несколькими строками «Match» (как в ответе geekosaur), потому что он ВСЕГДА использовал ForceCommand, возможно, из-за отсутствия опции «ForceCommand off».

На странице руководства говорится, что первый оператор в Match-Section «выигрывает», но поскольку более ранние Match-операторы не содержали Banner или ForceCommand, были использованы операторы в конце. С Banner я мог бы использовать "Banner / dev / null", но в ForceCommand ничего нельзя было бы вставить ...