Score:0

จะส่งต่อพอร์ต 8080 จากเซิร์ฟเวอร์ที่ห่างไกลไปยังไคลเอนต์จากไคลเอ็นต์โดยใช้ tunnel ssh ได้อย่างไร

ธง ke

ฉันได้ติดตั้ง GitLab ในนักเทียบท่าบนเครื่องที่อยู่ห่างไกล ตอนนี้ฉันต้องการส่งต่อพอร์ต 8080 จากเครื่องที่อยู่ห่างไกลไปยังพอร์ต 8080 ในเครื่องของฉัน

บนเครื่องที่อยู่ห่างไกล:

sudo docker run --detach --hostname gitlab.example.com --เผยแพร่ 443:443 --เผยแพร่ 8080:80 --เผยแพร่ 2222:22 --ชื่อ gitlab --เริ่มต้นใหม่เสมอ --volume $GITLAB_HOME/config:/etc /gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:latest

บนเครื่องของฉัน:

ssh -N -o "ExitOnForwardFailure ใช่" -R 8080:localhost:8080 someuser@the-distant-server -vvv

ฉันได้รับข้อผิดพลาดต่อไปนี้:

debug1: คำมั่นสัญญา: เครือข่าย
debug3: รับแพ็กเก็ต: พิมพ์ 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: รับแพ็กเก็ต: ประเภท 4
debug1: รีโมต: /home/someuser/.ssh/authorized_keys:1: ตัวเลือกคีย์: การส่งต่อพอร์ตตัวแทน การส่งต่อพอร์ต pty user-rc x11-forwarding
debug3: รับแพ็กเก็ต: พิมพ์ 82
debug1: การส่งต่อระยะไกลล้มเหลวสำหรับ: ฟัง 8080, เชื่อมต่อ localhost:8080
ข้อผิดพลาด: การส่งต่อพอร์ตระยะไกลล้มเหลวสำหรับการฟังพอร์ต 8080

และแน่นอนว่าใน /var/log/auth.logฉันได้รับข้อผิดพลาดต่อไปนี้:

9 ก.ค. 16:51:42 เซิร์ฟเวอร์ระยะไกล sshd[2723782]: ยอมรับคีย์สาธารณะสำหรับผู้ใช้บางคนจากพอร์ต 192.168.200.182 44850 ssh2: RSA SHA256:
9 ก.ค. 16:51:42 เซิร์ฟเวอร์ระยะไกล sshd[2723782]: pam_unix(sshd:session): เซสชันเปิดสำหรับผู้ใช้ someuser โดย (uid=0)
9 ก.ค. 16:51:42 systemd-logind เซิร์ฟเวอร์ระยะไกล [1083]: เซสชันใหม่ 116923 ของผู้ใช้ someuser
9 ก.ค. 16:51:42 เซิร์ฟเวอร์ระยะไกล systemd[2723795]: pam_unix(systemd-user:session): เซสชันเปิดสำหรับผู้ใช้ someuser โดย (uid=0)
9 กรกฎาคม 16:51:43 เซิร์ฟเวอร์ระยะไกล sshd[2723812]: ข้อผิดพลาด: ผูก [127.0.0.1]:8080: ที่อยู่ที่ใช้งานแล้ว
9 กรกฎาคม 16:51:43 เซิร์ฟเวอร์ระยะไกล sshd[2723812]: ข้อผิดพลาด: channel_setup_fwd_listener_tcpip: ไม่สามารถฟังพอร์ต: 8080
9 ก.ค. 16:51:43 เซิร์ฟเวอร์ระยะไกล sshd[2723782]: pam_unix(sshd:session): เซสชันปิดสำหรับผู้ใช้ someuser
9 ก.ค. 16:51:43 systemd-logind เซิร์ฟเวอร์ระยะไกล [1083]: เซสชัน 116923 ออกจากระบบ รอให้กระบวนการออก
9 ก.ค. 16:51:43 systemd-logind เซิร์ฟเวอร์ระยะไกล [1083]: ลบเซสชัน 116923

มันบอกฉัน ผูก [127.0.0.1]:8080: ที่อยู่ที่ใช้งานแล้ว.

  1. ฉันไม่เข้าใจว่าฉันจะฟังพอร์ต 8080 จากเครื่องที่อยู่ห่างไกลได้อย่างไรหากไม่มีกระบวนการใดที่สามารถเขียนถึงมันได้ ฉันคิดว่าฉันเข้าใจผิดว่าพอร์ต/การฟัง/การเขียน/ssh ทำงานที่นี่อย่างไร
  2. ฉันจะแก้ไขได้อย่างไร จุ๊ๆ คำสั่งเพื่อให้อุโมงค์นี้ใช้งานได้และเข้าถึงอินสแตนซ์ GitLab บน my 127.0.0.1:8080?
Score:1
ธง kz

คำตอบสั้น ๆ : ใช้สวิตช์ ssh -L แทน -ร.

คำอธิบาย: บนเครื่องที่อยู่ห่างไกล คุณเปิดคอนเทนเนอร์นักเทียบท่าซึ่งเผยแพร่พอร์ต 8080 ซึ่งหมายความว่าในรายละเอียด โฮสต์นักเทียบท่าจะเปิด ฟัง ซ็อกเก็ตและรอการเชื่อมต่อที่เข้ามา

การส่งต่อพอร์ตมีสองประเภท: -L และ -R:

  • -L เปิดฟังซ็อกเก็ตในเครื่องของคุณและส่งต่อการเชื่อมต่อขาเข้านี้ผ่านอุโมงค์ ssh และเปิดการเชื่อมต่อบนโฮสต์ระยะไกลไปยังที่อยู่ที่ระบุ (localhost:8080 ในกรณีนี้ซึ่งเป็นสิ่งที่คุณต้องการ)
  • -ร ทำงานในทางกลับกัน: รอการเชื่อมต่อขาเข้าบนเครื่องระยะไกลและส่งต่อไปยังโฮสต์ภายในเครื่อง สิ่งนี้ล้มเหลวแน่นอนเพราะคุณมีฟังซ็อกเก็ตที่อยู่ในที่อยู่นี้แล้ว (คอนเทนเนอร์นักเทียบท่า!)

คุณต้องคิดเสมอว่าใครเป็นคนเริ่มการเชื่อมต่อ อินสแตนซ์ Gitlab อาจเข้าถึงได้ผ่านเบราว์เซอร์ ซึ่งหมายความว่า ท้องถิ่น เบราว์เซอร์พยายามเปิดการเชื่อมต่อ ดังนั้นคุณต้องมีซ็อกเก็ตฟังในเครื่อง

vinzee avatar
ke flag
นี่เป็นครั้งแรกที่ฉันอ่านเกี่ยวกับซ็อกเก็ต 'LISTEN' เมื่อค้นหาคำอธิบายเกี่ยวกับ ssh tunnels มันทำให้ทุกอย่างชัดเจนมากขึ้น
Martin avatar
kz flag
คุณควรดูพื้นฐานเครือข่าย TCP อย่างแน่นอน ไม่น่าแปลกใจที่คุณเข้าใจตัวเลือก ssh tunnel ผิด...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา