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


11

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

모두 lsof와 netstat내가 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.