วิธีการรู้ว่าการส่งต่อพอร์ต SSH


12

ฉันได้กำหนดค่าใน~/.ssh/configการส่งต่อพอร์ตจำนวนมากสำหรับ VNC ด้วยพอร์ตที่แตกต่างกันสำหรับแต่ละเซิร์ฟเวอร์

มีคำสั่งที่ช่วยให้ฉันรู้ว่าพอร์ตใดที่ส่งต่อไปเมื่อฉันเปิดเซสชัน SSH หรือไม่

คำตอบ:


13

หากคุณใช้-vตัวเลือกเพื่อsshแสดงว่าคุณกำลังส่งต่ออะไร (แต่มันจะแสดงข้อความดีบั๊กอื่น ๆ ให้คุณดูด้วย):

ssh -v -L2222:localhost:22 remotehost

จะแสดงให้คุณ:

...debug messages...
debug1: Authentication succeeded (publickey).
Authenticated to remotehost ([10.0.0.23]:22).
debug1: Local connections to LOCALHOST:2222 forwarded to remote address localhost:22
debug1: Local forwarding listening on ::1 port 2222.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 2222.
...debug messages...

จากนั้นเมื่อคุณเชื่อมต่อกับรีโมตเชลล์นั้นคุณสามารถพิมพ์ลำดับคีย์พิเศษได้:

~#

ซึ่งจะแสดงรายการการเชื่อมต่อเช่นนี้:

The following connections are open:
  #3 client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1)
  #4 direct-tcpip: listening port 2222 for localhost port 22, connect from 127.0.0.1 port 59742 (t4 r1 i0/0 o0/0 fd 10/10 cc -1)

แต่โปรดทราบว่าเรื่องนี้จะมีเพียงรายชื่อส่งต่อพอร์ตที่เป็นจริงถูกใช้โดยโปรแกรมอื่น (ในกรณีนี้ผมก็ไม่ได้บนเครื่องท้องถิ่นของฉันที่จะมีมันส่งต่อไปยังtelnet localhost 2222remotehost

หากคุณไม่มีการเชื่อมต่อใด ๆ ที่กำลังถูกส่งต่อคุณยังสามารถเห็นสิ่งที่คำสั่ง ssh ของคุณกำลังฟังอยู่ภายในเครื่องโดยใช้netstatคำสั่งดังนี้:

% netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      28995/ssh       
tcp6       0      0 ::1:2222                :::*                    LISTEN      28995/ssh       

netstatคำสั่งก็จะอาจจะเป็นรายการสิ่งอื่น ๆ แต่สิ่งที่คุณต้องการที่จะมองหาในการส่งออกเป็นPID/Programคอลัมน์ที่จะมองหาsshกระบวนการและLocal Addressคอลัมน์ที่จะแสดงสิ่งที่พอร์ตที่มีการฟัง ในตัวอย่างนี้กำลังฟังport 2222ทั้งอินเตอร์เฟส IPv4 และ IPv6 บนเครื่องของฉัน


1
ขอบคุณสำหรับคำตอบนี้เป้าหมายของฉันคือการเพิ่มสคริปต์ใน /etc/update-motd.d/ เพื่อแสดงพอร์ตที่เปลี่ยนเส้นทางไป แต่ด้วยคำสั่ง ~ # ฉันมีเฉพาะพอร์ตที่เปลี่ยนเส้นทางบนเซิร์ฟเวอร์ และเป้าหมายก็คือการแสดง (ส่วนหนึ่งของเอาท์พุท ssh -v): การเชื่อมต่อท้องถิ่นไปยัง LOCALHOST: 5901 ส่งต่อไปยังที่อยู่ระยะไกล 127.0.0.1,5900 ฟังก์ชั่นการส่งต่อท้องถิ่นบน :: 1 พอร์ต 5901 ดูเหมือนว่าเป็นไปไม่ได้ ด้าน
slc66

สำหรับคนที่มาที่นี่ใน 2020+: ได้รับการจำหน่ายแล้วในความโปรดปรานของnetstat ss
ScumCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.