Визначте процес, використовуючи порт, без sudo


11

Я хотів би дізнатися, який процес (зокрема, ідентифікатор процесу) використовує даний порт. Один улов полягає в тому, що я не хочу використовувати судо, і я не ввійшов як root. Процеси, для яких я хочу, щоб це працював, керує той самий користувач, який я хочу знайти ідентифікатор процесу - тому я вважав би, що це просто.

І те, lsofі netstatінше не скаже мені ідентифікатор процесу, якщо я не запускаю їх за допомогою sudo - вони скажуть мені, що порт використовується, хоча.

Як додатковий контекст - у мене є різні додатки, які підключаються через SSH до сервера, яким я керую, і створюю зворотний порт вперед. Після того, як вони налаштовані, мій сервер виконує деяку обробку за допомогою переадресованого порту, і тоді з'єднання може бути припинено. Якщо я можу зіставити конкретні порти (у кожного додатка є свої) для процесів, це простий скрипт. Будь-які пропозиції?

Це, до речі, у вікні Ubuntu - але я здогадуюсь, що будь-яке рішення буде стандартним для більшості дистрибутивів Linux.

Відповіді:


7

--programВаріант NETSTAT показує вам PIDs і імена ваших власних процесів. Цей параметр присутній і працює на RHEL 6 в netstat 1,42 з чистого інструмента 1,60.

Я перевірив, що netstat -an --tcp --programпоказує мені PID моїх процесів.


1
Я думаю, ти мав на увазі -an. netstat -pantтакож працює і простіше запам'ятати.
Едуардо Іванець

Так, зайве "-" прокралося. І мені подобається мнемонічне.
Paweł Brodacki

Я боюся, що це не працює на Ubuntu - оскільки він не показує процес у деяких випадках без кореня - і, здається, пересилання SSH є одним із таких випадків.
пт

Pawel: зараз ОП нарешті отримав конкретні стосунки зі своїм використанням (див. Коментар у моєму ланцюжку), я закликаю вас спробувати ще раз. Я зробив це у вікні CentOS 5 (також netstat 1,42 від net-tools 1.60), і він не вдається, як він каже. Мене зацікавить ваш досвід.
MadHatter

3

Пропозиція Павла, здається, працює добре для мене, але як альтернатива, ось я слухаю з shell1:

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

і ось я бачу це з lsofshell2:

[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)

Не могли б ви показати нам частину вашої вибірки, бажано не надто сильно відредаговану?


1
Схоже, форварди SSH повинні вести себе по-різному - навіть незважаючи на те, що процес належить тому ж користувачеві, я не можу бачити його в списку взагалі у lsofвиході, якщо я не запускаю його як root / sudo.
пт

Я не отримую жодного виводу lsof на переадресований порт, коли запускаюсь як користувач. Якщо я запускаю його з судо, то я бачу вихід, як і те, що ви додали до своєї відповіді. Тільки помітна різниця в тому, що я бачу фактичний номер порту замість vcom-тунелю.
пт

Крім того, це віддалений вперед, а не локальний вперед - можливо, саме в цьому джерело різниці? Або ви тестували дистанційним вперед?
пт

Під віддаленим вперед ви маєте на увазі "з сервера AI ssh на сервер B, порт пересилання xxx з сервера B назад на сервер A"? Якщо так, то чому ви розраховуєте забрати щось із netstat / lsof на сервері A? Цим не створено жодного нового слухача на сервері A, тому жодне присвоєння порту на сервері A не бере участь (зберігайте ефемерно).
MadHatter

SSH від A до B, порт вперед від порту X на B до порту Y на C (який знаходиться всередині брандмауера A - отже, необхідність вперед), використовуючи lsof / netstat на B для порту X.
пат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.