Назад | Перейти на главную страницу

Определить процесс, используя порт, без sudo

Я хотел бы узнать, какой процесс (в частности, идентификатор процесса) использует данный порт. Единственная загвоздка в том, что я не хочу использовать sudo и не вошел в систему как root. Процессы, для которых я хочу, чтобы это работало, выполняются тем же пользователем, которому я хочу найти идентификатор процесса, поэтому я бы подумал, что это просто.

Обе lsof и netstat не сообщит мне идентификатор процесса, если я не запустил их с помощью sudo - они скажут мне, что порт уже используется.

В качестве дополнительного контекста - у меня есть различные приложения, которые подключаются через SSH к серверу, которым я управляю, и создают переадресацию обратного порта. Как только они настроены, мой сервер выполняет некоторую обработку, используя перенаправленный порт, после чего соединение может быть прервано. Если я могу сопоставить определенные порты (у каждого приложения свои собственные) с процессами, это будет простой сценарий. Какие-либо предложения?

Это, кстати, находится в коробке с Ubuntu, но я предполагаю, что любое решение будет стандартным для большинства дистрибутивов Linux.

В --program опция netstat показывает вам PID и имена ваших собственных процессов. Эта опция присутствует и работает в RHEL 6 в netstat 1.42 из net-tools 1.60.

Я подтвердил, что netstat -an --tcp --program показывает мне PID моих процессов.

Мне кажется, что предложение Павла работает нормально, но в качестве альтернативы я слушаю из shell1:

[madhatta@risby ~]$ nc -l  localhost 3456

и вот я вижу это с lsof из оболочки2:

[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nc      18109 madhatta    3u  IPv4 69205153      0t0  TCP localhost.localdomain:vat (LISTEN)

редактировать: вы пишете в комментарии, что

Перенаправления SSH должны вести себя по-разному - даже если процесс принадлежит одному и тому же пользователю, я вообще не вижу его в выводе lsof, если я не запустил его как root / sudo.

но это не так для меня. Используя ssh для перенаправления локального порта 8001, с ssh vpn.example.com -L 8001:rt.int:80, Затем нахожу:

[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     5375 madhatta    8u  IPv6 381234      0t0  TCP [::1]:vcom-tunnel (LISTEN)
ssh     5375 madhatta    9u  IPv4 381235      0t0  TCP 127.0.0.1:vcom-tunnel (LISTEN)

Не могли бы вы показать нам некоторые из ваших примеров вывода, желательно не слишком сильно отредактированные?