Я хотел бы узнать, какой процесс (в частности, идентификатор процесса) использует данный порт. Единственная загвоздка в том, что я не хочу использовать 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)
Не могли бы вы показать нам некоторые из ваших примеров вывода, желательно не слишком сильно отредактированные?