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

Мы хотим предоставить как можно меньше разрешений / прав на удаленный хост, на котором будет запускаться 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 ответ1

0

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

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

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

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

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