Используйте SSH для передачи tcpdump в wireshark с помощью "команды" в authorized_keys

Мы хотим включить трассировку сети в режиме реального времени для тестирования приложений.

Мы хотим предоставить как можно меньше разрешений / прав на удаленный хост, на котором будет запускаться tcpdump.

Поэтому я попытался настроить авторизованный ключ, который используется для входа в систему.

command="sudo tcpdump -n -i eth0 -s 65535 -w -" ssh-rsa AAAAB3NzaC....

Когда я подключаюсь с клиентского компьютера и использую

ssh -i private.key user@10.10.254.200 | wireshark -S -k -i -

Wireshark жалуется и говорит: "Неопознанный формат pcap"

Когда мы вместо этого бежим

 ssh -i private.key user@10.10.254.200 "tcpdump -i eth0 -w -" | wireshark -S -k -i -

и удалите команду ="..." из авторизованных ключей, это работает!

В чем разница между этими двумя вариантами? если я удаляю "| wireshark..." в обоих случаях, я вижу двоичные данные, поступающие ко мне в терминале...

В случае, если есть разница, которая сделает это невозможным в любом случае, знаете ли вы, ребята, каким образом команда может быть каким-то образом предопределена на стороне сервера?

Как я пытался объяснить в начале, клиентские машины, на которых работает wireshark, должны быть максимально ограничены.

Спасибо за вашу помощь!

1 ответ

Решение

В первом случае это обычный ssh-сеанс с псевдотерминалом.

Если вам нужны только данные (без управляющих символов терминала и тому подобного), попробуйте ssh с -T переключатель.

Другое решение, как добиться того же поведения, это поставить no-pty рядом с командой в authorized_keys файл (спасибо @mykel):

command="sudo tcpdump -n -i eth0 -s 65535 -w -",no-pty ssh-rsa AAAAB3NzaC....
Другие вопросы по тегам