В Ubuntu 11.10 я обнаружил, что могу блокировать команды ssh, отправленные с и без -T, и блокировать копирование scp, позволяя при этом перенаправлять порты.
В частности, у меня есть redis-сервер на «somehost», связанный с localhost: 6379, которым я хочу безопасно поделиться через туннели ssh с другими хостами, которые имеют ключевой файл и будут использовать ssh с:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Это приведет к тому, что redis-сервер «localhost» порт 6379 на «somehost» будет отображаться локально на хосте, выполняющем команду ssh, переназначается на «localhost» порт 16379.
На удаленном "somehost" Вот что я использовал для authorized_keys:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
no-pty отключает большинство попыток ssh, которые хотят открыть терминал.
В разрешении на открытие объясняется, какие порты разрешено пересылать, в данном случае порт 6379 - порт редис-сервера, который я хотел перенаправить.
Команда = "/ bin / echo do-not-send-команды" повторяет "do-not-send-команды", если кому-то или чему-то удается отправить команды на хост через ssh -T или другим способом.
Из последней версии Ubuntu man sshd
, authorized_keys / команда описывается следующим образом:
команда = "команда"
Указывает, что команда выполняется всякий раз, когда используется этот ключ
для аутентификации. Команда, предоставленная пользователем (если есть)
игнорироваться.
Попытки использовать защищенное копирование файлов scp также будут неудачными с эхом "do-not-send-команды". Я обнаружил, что sftp также терпит неудачу с этой конфигурацией.
Я думаю, что предложение с ограниченной оболочкой, сделанное в некоторых предыдущих ответах, также является хорошей идеей.
Кроме того, я согласен, что все, что здесь подробно описано, можно определить по прочтению «man sshd» и поиску в нем «authorized_keys»