SSH: влияние опции no-pty на вход в авторизованные ключи

Я смущен поведением 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 сообщение в начале сеанса (которое предполагает, что опция входа в систему имеет определенный эффект) и 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 ответ

Решение

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

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 предложил бы иначе.

Другие вопросы по тегам