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