หลังจาก 'ssh' โดยไม่มี `-X 'ไปยังเครื่องเป็นไปได้ไหมที่จะเปลี่ยน` $ DISPLAY' เพื่อให้มันทำงานเหมือน `ssh -X '


22

หลังจากsshไม่มี-Xเครื่องไปเป็นไปได้ไหมที่จะเปลี่ยนการตั้งค่าบางอย่าง (เช่น$DISPLAY) เพื่อให้ทำงานได้ssh -Xหรือไม่ ถ้าไม่ใช่เหตุผลคืออะไร? ขอบคุณ


ฉันขอแนะนำให้ทำให้ชื่อคำถามสั้นลงโดยไม่ต้องออกchange $DISPLAY toไป ชื่อคำถามปัจจุบันไม่สามารถแสดงเต็มในผลการค้นหาและการเปลี่ยน $ DISPLAY เป็นส่วนหนึ่งของคำตอบไม่ใช่ส่วนหนึ่งของคำถาม
Dmitry Grigoryev

คำตอบ:


33

คุณสามารถสร้างการเชื่อมต่อที่สองโดยเปิดใช้งานการส่งต่อ X11 แล้วคุณยังสามารถใช้DISPLAYตัวแปรสภาพแวดล้อมจากการเชื่อมต่อที่สองในครั้งแรก

ในหน้าต่างที่ 1:

$ ssh user@host
user@host$ ...

ในหน้าต่างที่ 2:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

กลับไปที่หน้าต่างแรก:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

น่าเสียดายที่sshไม่มีสิ่งใดที่จะมีการส่งต่อ X11 (หรืออื่น ๆ ) ไปยังกระบวนการ / เซสชันที่เริ่มต้นหรือต่อผู้ใช้ที่ทำงานบนเครื่องระยะไกล (เช่นโดยใช้ซ็อกเก็ต Unix พร้อม / ออกตรวจสอบข้อมูลรับรองหรือโดยใช้เนมสเปซ) และการส่งต่อเหล่านั้นเป็นซ็อกเก็ตการฟัง TCP แบบง่าย ๆ ที่ทุกคนในเครื่องระยะไกลสามารถเชื่อมต่อได้ ความปลอดภัยทั้งหมดของการส่งต่อ X11 ขึ้นอยู่กับการตรวจสอบความถูกต้อง X11

X11 การส่งต่อด้วยมือ

sshd_config(5)manpage กล่าวว่า:

การปิดใช้งานการส่งต่อ X11 ไม่ได้ป้องกันผู้ใช้จากการส่งต่อการรับส่งข้อมูล X11 เนื่องจากผู้ใช้สามารถติดตั้งตัวส่งต่อของตนเองได้เสมอ

นี่คือวิธีที่คุณสามารถทำได้ด้วยมือ

ก่อนอื่นให้แน่ใจว่าได้ปิดการใช้งานการควบคุมการเข้าถึงโฮสต์หรือผู้ใช้ที่ข้ามกลไก x11 auth [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

จากนั้นแสดงข้อมูลรับรองความถูกต้องสำหรับDISPLAY=:0บนเครื่องท้องถิ่น:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

เชื่อมต่อกับเครื่องระยะไกลโดยไม่ต้องส่งต่อ X11:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

เปิดบรรทัดคำสั่งผ่าน~Cและเพิ่มการส่งต่อระยะไกลจากพอร์ต6000+43ไปยังซ็อกเก็ตยูนิกซ์ที่สอดคล้องกับการแสดง:0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

ตั้งค่า$DISPLAYenvvar และเพิ่มข้อมูล auth จาก local ไปยังเครื่องรีโมต:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

ตอนนี้คุณพร้อมที่จะไป:

hzy64$ xterm

[1] เพราะความเข้าใจผิดbugfixการควบคุมการเข้าถึงสำหรับผู้ใช้ที่มีการเปิดโดยเริ่มต้นใน Debian /etc/X11/Xsession.d/35x11-common_xhost-localผ่าน ที่แย่กว่านั้นคือมีเพียงค่าเริ่มต้นเดียวใน XWayland ที่ไม่สามารถปิดได้ โปรแกรมใด ๆ ที่พร็อกซีของโพรโทคอล X11 (เช่น. xscope) จะต้องทำการตรวจสอบคุกกี้ของตัวเอง x11 (วิธีที่ ssh ทำ) เว้นแต่ว่ามันจะต้องการเปิดช่องโหว่ให้กับเซิร์ฟเวอร์ X11


1
หากคุณสนใจเรื่องความปลอดภัย-Xจะดีกว่าเล็กน้อย-Yใช่ไหม
สตีเฟ่น Kitt

13
จำนวนมาก (มากที่สุด?) โปรแกรม X11 จะไม่ได้ทำงานด้วยเท่านั้นที่มี-X -Yคนไม่ได้สังเกตว่าเพราะในหลาย ๆ ระบบ (เช่นเดเบียน) ForwardX11Trustedถูกตั้งค่าเป็นค่าyesเริ่มต้น-Xและ-Yตัวเลือกและตัวเลือกจะเทียบเท่า ;-)
mosvy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.