sudo없이 포트를 사용하여 프로세스 결정


11

주어진 포트를 사용하는 프로세스 (특히 프로세스 ID)를 찾고 싶습니다. 한 가지 발견은 sudo를 사용하고 싶지 않으며 루트로 로그인하지 않은 것입니다. 이 작업을 수행하려는 프로세스는 프로세스 ID를 찾으려는 동일한 사용자가 실행하므로 이것이 간단하다고 생각했을 것입니다.

모두 lsofnetstat내가 sudo는을 사용하여 실행하지 않으면 나에게 프로세스 ID를 말하지 않을 것이다 - 그들은 포트가 있지만 사용되고 있음을 말해 것입니다.

일부 추가 컨텍스트-SSH를 통해 관리하는 서버에 연결하고 역방향 포트 전달을 만드는 다양한 앱이 있습니다. 일단 설정되면 내 서버는 전달 포트를 사용하여 일부 처리를 수행 한 다음 연결을 끊을 수 있습니다. 특정 포트 (각 앱마다 고유 한 포트)를 프로세스에 매핑 할 수 있다면 이것은 간단한 스크립트입니다. 어떤 제안?

그건 그렇고 우분투 상자에 있지만 대부분의 Linux 배포판에서 모든 솔루션이 표준으로 추측됩니다.

답변:


7

--programNETSTAT 쇼 당신의 PID와 자신의 프로세스의 이름에 대한 옵션을 선택합니다. 이 옵션은 net-tools 1.60 중 netstat 1.42의 RHEL 6에서 작동 중입니다.

netstat -an --tcp --program내 프로세스의 PID 를 보여줍니다.


1
나는 당신이 의미하는 것 같아요 -an. netstat -pant또한 작동하며 기억하기 쉽습니다.
Eduardo Ivanec

그렇습니다. 불필요한 "-"가 들어갔습니다. 그리고 니모닉을 좋아합니다.
Paweł Brodacki

루트가없는 경우 프로세스를 표시하지 않기 때문에 우분투에서 작동하지 않을까 걱정됩니다 .SSH 포워드가 그러한 경우 중 하나입니다.
pat

Pawel : 이제 OP가 마침내 그의 사용 사례에 구체화되었습니다 (내 체인의 의견 참조). 다시 시도해 보시기 바랍니다. CentOS 5 상자 (net-tools 1.60의 netstat 1.42)에서 수행했지만 그가 말한대로 실패합니다. 당신의 경험에 관심이 있습니다.
MadHatter

3

Pawel의 제안은 나에게 잘 작동하는 것 같지만 대안으로 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 출력에 전혀 표시되지 않습니다.

그러나 이것은 나에게는 그렇지 않습니다. 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루트 / 스 도어로 실행하지 않으면 출력 에 전혀 나열되지 않습니다 .
pat

사용자로 실행할 때 전달 포트에서 lsof 출력이 전혀 없습니다. sudo로 실행하면 답변에 추가 한 것과 매우 유사한 결과가 나타납니다. 주목할만한 차이점은 vcom-tunnel 대신 실제 포트 번호가 있다는 것입니다.
pat

또한 이것은 로컬 포워드가 아닌 원격 포워드입니다. 아마도 이것이 차이의 원인일까요? 아니면 원격으로 테스트 했습니까?
pat

원격 전달이란 "서버 AI ssh에서 서버 B로, 포트 xxx를 서버 B에서 서버 A로 다시 전달"을 의미합니까? 그렇다면 왜 서버 A에서 netstat / lsof를 사용하여 무엇을 선택해야합니까? 이것에 의해 서버 A에 새로운 리스너가 작성되지 않으므로 서버 A에 대한 포트 지정이 포함되지 않습니다 (일시적으로 저장).
MadHatter

SSH를 A에서 B로, 포트 X에서 B의 포트 X에서 C의 포트 Y로 포트 포워드 (A의 방화벽 내부에 있으므로 포워드 필요)
pat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.