В 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-server, порт "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 - это порт redis-server, который я хотел перенаправить.
Команда = "/ bin / echo do-not-send-commands" повторяет "do-not-send-commands", если кому-то или чему-то удается отправить команды на хост через ssh -T или иным образом.
Из недавнего Ubuntu man sshd
команда authorized_keys / описывается следующим образом:
command = "command" Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если есть), игнорируется.
Попытки использовать безопасное копирование файлов scp также будут неудачными с эхом «do-not-send-commands». Я обнаружил, что sftp также терпит неудачу с этой конфигурацией.
Я думаю, что предложение ограниченной оболочки, сделанное в некоторых предыдущих ответах, также является хорошей идеей. Кроме того, я согласен, что все, что здесь подробно описано, можно определить, прочитав "man sshd" и выполнив поиск в нем "authorized_keys"
no-pty
он не позволяет открывать интерактивные окна, он ничего не делает для предотвращения выполнения команд, поэтому пользователь может редактироватьauthorized_keys
файл, если у него есть доступ с чем-то вродеssh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.