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