1

Меня смущает поведение параметров входа с restrict или no-pty , добавленных к ключу в ~/.ssh/authorized_keys .

Для данного ключа я намеревался предотвратить любое взаимодействие, кроме запуска туннеля SSH к определенному локальному порту:

restrict,permitopen="localhost:80" ssh-rsa AAAAB3NzaC1yc2EAAA[...]3c7rmJT5/ tunnel@a.example.com

Фактический эффект заключается в том, что при идентификации с помощью соответствующего закрытого ключа я могу создать туннель, но, видимо, также выполнить произвольные команды:

tunnel@a $ ssh -i tunnel_rsa user@b.example.com

PTY allocation request failed on channel 0
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)

[...]

You have new mail.

ls .ssh/
authorized_keys
id_rsa
id_rsa.pub
known_hosts

Примечание. PTY allocation request failed on channel 0 сообщении канала 0 в начале сеанса (что указывает на то, что опция входа в систему имеет определенный эффект) и команда ls .ssh/ с ее выводом.

Там нет подсказки, но это не то, что я собирался сделать. Может кто-нибудь, пожалуйста, пролить свет на это? Кроме того, каков предпочтительный метод, чтобы ограничить данный ключ только созданием туннеля?

Обновить

с restrict туннель не очень работает:

$ curl localhost:8080
curl: (52) Empty reply from server

или используя HTTPie:

$ http :8080
http: error: ConnectionError: ('Connection aborted.', BadStatusLine("''",))

со следующим выводом из команды ssh -L ... :

channel 2: open failed: administratively prohibited: open failed

Он работает с параметром no-pty вместо restricted , но исходная проблема остается.

1 ответ1

1

После некоторых исследований и экспериментов эта комбинация вариантов, кажется, делает свое дело:

command="",restrict,port-forwarding,permitopen="localhost:80"

Позвольте мне пройти каждый из них в отдельности:

  • command=""

    запрещает выполнение любой команды с помощью этого ключа

  • restrict

    Отключите все параметры, такие как выделение TTY, переадресация портов, переадресация агента, user-rc и пересылка X11 одновременно.

  • port-forwarding

    Включает переадресацию TCP-порта, но см. Ниже.

  • permitopen="localhost:80"

    Ограничивает переадресацию TCP-порта на локальный порт 80 . Это единственное, что должен позволить этот ключ.

Я смог понять это в основном, прочитав главу OpenSSH WikiBook «Файлы конфигурации клиента», так что большая часть заслуг принадлежит его авторам (Lars Noodén et al.). Недостающей частью была port-forwarding - без нее пересылка запрещена, даже если permitopen предлагает иное.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .