วิธีการเปิดใช้งานการส่งต่อ SSH X11 ผ่านเซิร์ฟเวอร์เพิ่มเติม


32

ฉันมีโฮสต์ A, B และ C จากโฮสต์ AI สามารถเข้าถึงผ่าน ssh เท่านั้น B. จาก BI สามารถเข้าถึง C. ฉันต้องการให้สามารถเรียกใช้โปรแกรม X11 บน C และส่งต่อการแสดงผลไปที่ A

ฉันลองสิ่งนี้:

A $ ssh -XB
B $ ssh -XC
C $ xclock
ข้อผิดพลาด: ไม่สามารถเปิดจอแสดงผล:

แต่มันไม่ทำงาน

คำตอบ:


24

มีหลายวิธีในการทำเช่นนี้วิธีที่ฉันชอบคือการส่งต่อพอร์ต ssh:

ก่อนอื่นให้เชื่อมต่อกับเครื่อง B และส่งต่อ [localPort] ไปที่ C: 22 ถึง B

A$ ssh -L [localPort]:C:22 B

จากนั้นเชื่อมต่อ C จาก A ผ่านอุโมงค์ที่สร้างขึ้นใหม่นี้โดยใช้ [localPort] เพื่อส่งต่อ X11

A$ ssh -X -p [localPort] localhost

ตอนนี้เราสามารถรันโปรแกรม X11 บน C และให้มันแสดงบน A

C$ xclock

[localPort] สามารถเป็นพอร์ตใดก็ได้ที่คุณยังไม่ได้ฟังบน A ฉันมักจะใช้ 2222 เพื่อความเรียบง่าย


3
ไม่แน่นอน ... หาก X11Forwarding ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์ C มันจะไม่ทำงาน มันก็จะไม่ทำงานจนกว่าหนึ่งชุด AllowTcpForwarding ใช่และใช่ GatewayPorts บนเซิร์ฟเวอร์ B. คำตอบนี้เป็นที่ยอมรับไม่ได้ที่ทุกคน
asdmin

คุณทำให้เป็นจุดที่ดีฉันไม่ได้สังเกตเรื่องนี้ตั้งแต่ฉันใช้เดเบียนที่ X11 การส่งต่อและ AllowTcpForwarding ถูกเปิดใช้งานโดยค่าเริ่มต้น ไม่จำเป็นต้องใช้ GatewayPorts ตั้งแต่เมื่อปิดใช้งาน SSH ยังคงฟัง localhost และนั่นคือสิ่งที่เรากำลังเชื่อมต่อ คุณเท่านั้นที่จะต้องได้ถ้าคุณต้องการที่จะทำให้การเชื่อมต่อที่สองผ่าน IP ภายนอกสำหรับเครื่องเอ
dave

ในขั้นตอนที่ 1 ไม่ได้ถามรหัสผ่านสำหรับโฮสต์ B และฉันจบการเชื่อมต่อในโฮสต์ C ในหน้าต่างอื่นฉันลองขั้นตอนที่ 2 และได้รับ "ssh_exchange_identification: การเชื่อมต่อปิดโดยโฮสต์ระยะไกล"
msb

ssh: เชื่อมต่อกับโฮสต์ ... พอร์ต 22: การเชื่อมต่อถูกปฏิเสธขณะดำเนินการคำสั่งแรก
Rodrigo

7

สามารถทำได้โดยใช้การส่งต่อพอร์ต:

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock

พอร์ต localhost: 2022 ถูกส่งต่อไปยัง C: 22 ผ่าน B SSH ไปยัง C ผ่าน localhost: 2022 ใช้ X ตามปกติ


2
สิ่งนี้จะไม่ทำงานด้วยเหตุผลเดียวกันกับที่บันทึกไว้ที่อื่นในกรณี B (เกตเวย์) ไม่มีตัวเลือกการส่งต่อ sshd ที่ถูกต้องเปิดใช้งาน
g33kz0r

ไม่ได้ขอรหัสผ่านของฉันไปยังโฮสต์ B ซึ่งแปลก และมันใช้งานไม่ได้ฉันได้รับข้อความแสดงข้อผิดพลาด "ช่องที่ 2: เปิดล้มเหลว: ไม่อนุญาตให้ดำเนินการ: เปิดล้มเหลว ssh_exchange_identification: การเชื่อมต่อถูกปิดโดยโฮสต์ระยะไกล"
msb

4

สมมติว่าปัญหาคือเครื่องกลางไม่มี X แต่มันถูกกำหนดค่าไว้เพื่ออนุญาตให้ส่งต่อ X11 เพียงแค่ติดตั้ง xauth

บนระบบที่ใช้ yum (fedora, redhat, centos):

B$ sudo yum install xauth

บนระบบที่ใช้ apt (debian, ubuntu):

B$ sudo apt-get install xauth

Yay- เหมาะสำหรับราสเบอร์รี่หัวขาด
cmc

@cmc หรือใช้ ssh เหมือน vpn
Jayen

@cmc คุณมีyumpi หรือไม่
Jayen

nope- sudo apt-get install xauth
cmc

3

สำหรับรุ่นที่ใหม่กว่า opensshd คุณต้องปิดการใช้งานX11UseLocalhostเพื่อให้ทำงาน

คุณต้องทำสิ่งนี้บนโฮสต์ C /etc/ssh/sshd_configและรีสตาร์ท sshd เพื่อให้ทำงาน:

X11Forwarding yes
X11UseLocalhost no

2

คุณไม่สามารถส่งต่อจอแสดงผล X11 ได้หากคุณปิดการใช้งาน X11Forwarding ใน sshd ใด ๆ ที่คุณใช้งานอยู่

ผู้ชาย sshd_config:

X11Forwarding
  Specifies whether X11 forwarding is permitted. The argument must be “yes”
  or “no”.  The default is “no”.

คุณต้องแน่ใจว่า X11Forwarding เปิดใช้งานที่ปลายทางและ sshds ระดับกลางทั้งหมดที่คุณใช้

เพียงเล็กน้อย: คุณควรลองใช้ VNC, การส่งต่อจอภาพ X11 นั้นใช้แบนด์วิดท์ค่อนข้างมาก


คำแนะนำของ @ AgentK และ @ dave ต้องการเพียง X11Forwarding ที่จะเปิดใช้งานบนโฮสต์สุดท้ายเนื่องจากใช้อุโมงค์ SSH เพื่อเลี่ยงผ่านโฮสต์กลาง ข้อเสนอแนะของคุณเกือบจะแน่นอนสาเหตุที่วิธีการของ OP ล้มเหลวในตอนแรก แต่ที่ไม่ตอบไม่ได้คนอื่น ๆ ที่มีค่าเฉลี่ยของ "ไม่เป็นที่ยอมรับ"
แดเนียลลอว์สัน

คำตอบของพวกเขานั้นมีข้อบกพร่องและแก้ไขปัญหาได้ไม่แก้ปัญหา คำตอบที่ถูกและมีประโยชน์จะพิจารณาคำถามต้นฉบับและแก้ไขมันและให้วิธีการอื่น ๆเฉพาะในกรณีที่คำถามต้นฉบับไม่สามารถแก้ไขได้ โดยวิธีการที่พวกเขาทั้งสองไม่ได้พูดถึง X11 การส่งต่อซึ่งเป็นสิ่งจำเป็น
asdmin

ในบางระบบค่าเริ่มต้นคือ " yes"
Brad Gilbert

ฉันตรวจสอบว่า X11Forwarding เปิดใช้งานใน B และ C และ AllowTcpForwarding ตั้งค่าเป็นใช่ใน B แต่ผลลัพธ์ของคำสั่งของฉันเหมือนกัน และคำตอบของเดฟก็ใช้ได้ดีสำหรับฉัน
lexsys

จากนั้นทำเช่นนั้น แต่มันเป็นเพียงวิธีการรักษา คุณยังสามารถเริ่ม ssh ด้วยพารามิเตอร์ '-v' หรือลอง echo $ DISPLAY คำสั่ง ssh ที่ซ้อนกันทั้งหมดเพื่อค้นหาว่า $ DISPLAY หายไปไหน
asdmin

2

หากคุณไปจาก A ถึง C บ่อยครั้งคุณสามารถกำหนดค่า B เป็นพร็อกซี:

A:~/.ssh/config:

Host C
  ForwardX11   yes
  ProxyCommand ssh -W %h:%p B

จากนั้นเป็นเพียง:

A$ ssh C xclock

1

คุณเคยลองด้วย

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock

แฟล็ก -Y "เปิดใช้งานการส่งต่อ X11 ที่เชื่อถือได้"


ผลลัพธ์เดียวกัน
lexsys

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