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

2350
Tadeusz Łazurski

Меня смущает поведение 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

1 ответ на вопрос

1
Tadeusz Łazurski

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

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

Похожие вопросы