กำหนดกระบวนการโดยใช้พอร์ตโดยไม่มี sudo


11

ฉันต้องการค้นหาว่ากระบวนการใด (โดยเฉพาะ id กระบวนการ) กำลังใช้พอร์ตที่กำหนด สิ่งหนึ่งที่จับได้คือฉันไม่ต้องการใช้ sudo และฉันไม่ได้ลงชื่อเข้าใช้ในฐานะรูท กระบวนการที่ฉันต้องการให้การทำงานดำเนินการโดยผู้ใช้เดียวกันกับที่ฉันต้องการค้นหา id กระบวนการ - ดังนั้นฉันคิดว่ามันง่าย

ทั้งสองlsofและnetstatจะไม่บอก ID กระบวนการให้ฉันจนกว่าฉันจะเรียกใช้โดยใช้ sudo - พวกเขาจะบอกฉันว่าพอร์ตนั้นถูกใช้งานอยู่

บริบทเพิ่มเติมบางอย่าง - ฉันมีแอพต่าง ๆ ทั้งหมดที่เชื่อมต่อผ่าน SSH ไปยังเซิร์ฟเวอร์ที่ฉันจัดการและสร้างพอร์ตย้อนกลับไปข้างหน้า เมื่อตั้งค่าแล้วเซิร์ฟเวอร์ของฉันจะทำการประมวลผลโดยใช้พอร์ตที่ส่งต่อแล้วจากนั้นการเชื่อมต่ออาจถูกทำลาย หากฉันสามารถจับคู่พอร์ตเฉพาะ (แต่ละแอปมีของตัวเอง) กับกระบวนการนี่เป็นสคริปต์ง่ายๆ ข้อเสนอแนะใด ๆ

นี่คือในกล่อง Ubuntu โดยวิธี - แต่ฉันคิดว่าการแก้ปัญหาใด ๆ ที่จะเป็นมาตรฐานใน Linux distros ส่วนใหญ่

คำตอบ:


7

--programตัวเลือกที่จะแสดงให้เห็นว่าคุณ netstat PIDs และชื่อของกระบวนการของคุณเอง ตัวเลือกนี้มีอยู่และทำงานบน RHEL 6 ใน netstat 1.42 จาก net-tools 1.60

ฉันยืนยันว่าnetstat -an --tcp --programแสดง PID ของกระบวนการของฉัน


1
-anฉันคิดว่าคุณหมายถึง netstat -pantใช้งานได้และง่ายต่อการจดจำ
Eduardo Ivanec

ใช่ฟุ่มเฟือย "-" พุ่งเข้ามาและฉันชอบช่วยในการจำ
Paweł Brodacki

ฉันเกรงว่านี่จะไม่ทำงานบน Ubuntu - ในกรณีที่มันไม่แสดงกระบวนการในบางกรณีโดยไม่มีรูท - และดูเหมือนว่า SSH forward เป็นหนึ่งในกรณีเหล่านั้น
pat

Pawel: ตอนนี้ OP ได้รับเป็นรูปธรรมกับกรณีการใช้งานของเขา (ดูความคิดเห็นในห่วงโซ่ของฉัน) ฉันขอให้คุณลองอีกครั้ง ฉันทำในกล่อง CentOS 5 (เช่น netstat 1.42 จาก net-tools 1.60) และมันก็ล้มเหลวอย่างที่เขาบอก ฉันจะสนใจประสบการณ์ของคุณ
MadHatter

3

คำแนะนำของ Pawel ดูเหมือนจะทำงานได้ดีสำหรับฉัน แต่เป็นทางเลือกนี่คือฉันกำลังฟังจาก shell1:

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

และนี่คือฉันเห็นมันด้วยlsofจาก shell2:

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

คุณอาจช่วยแสดงตัวอย่างผลงานของคุณให้เราดูได้โดยไม่ต้อง redacted มากเกินไปหรือไม่?


1
ดูเหมือนว่าการส่งต่อ SSH จะต้องทำตัวต่างออกไป - แม้ว่ากระบวนการนั้นจะเป็นเจ้าของโดยผู้ใช้คนเดียวกัน แต่ฉันไม่เห็นมันแสดงรายการlsofเอาท์พุทเลยยกเว้นว่าฉันจะเรียกใช้เป็น root / sudo
pat

ฉันไม่ได้รับผลลัพธ์ใด ๆ เลยบนพอร์ตที่ส่งต่อเมื่อเรียกใช้ในฐานะผู้ใช้ ถ้าฉันรันด้วย sudo ฉันเห็นผลลัพธ์เหมือนกับสิ่งที่คุณเพิ่มเข้าไปในคำตอบของคุณ ข้อแตกต่างที่น่าสังเกตคือฉันเห็นหมายเลขพอร์ตจริงแทนที่จะเป็น vcom-tunnel
pat

นอกจากนี้นี่คือการส่งต่อระยะไกลไม่ใช่การส่งต่อภายในเครื่องบางทีอาจเป็นที่มาของความแตกต่าง หรือว่าคุณกำลังทดสอบด้วยการส่งต่อระยะไกล
pat

โดยการส่งต่อระยะไกลคุณหมายถึง "จากเซิร์ฟเวอร์ AI ssh ไปยังเซิร์ฟเวอร์ B ส่งต่อพอร์ต xxx จากเซิร์ฟเวอร์ B กลับไปที่เซิร์ฟเวอร์ A" หรือไม่ ถ้าเป็นเช่นนั้นทำไมคุณคาดหวังที่จะรับอะไรด้วย netstat / lsof บนเซิร์ฟเวอร์ A ไม่มีการสร้าง listener ใหม่บนเซิร์ฟเวอร์ A ดังนั้นจึงไม่มีการกำหนดพอร์ตบนเซิร์ฟเวอร์ A ที่เกี่ยวข้อง (บันทึก ephemerally)
MadHatter

SSH จาก A ถึง B พอร์ตไปข้างหน้าจากพอร์ต X บน B ถึงพอร์ต Y บน C (ซึ่งอยู่ภายในไฟร์วอลล์ของ A - ดังนั้นจึงจำเป็นต้องส่งต่อ) โดยใช้ lsof / netstat บน B สำหรับพอร์ต X
pat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.