หลังจากssh
ไม่มี-X
เครื่องไปเป็นไปได้ไหมที่จะเปลี่ยนการตั้งค่าบางอย่าง (เช่น$DISPLAY
) เพื่อให้ทำงานได้ssh -X
หรือไม่ ถ้าไม่ใช่เหตุผลคืออะไร? ขอบคุณ
หลังจากssh
ไม่มี-X
เครื่องไปเป็นไปได้ไหมที่จะเปลี่ยนการตั้งค่าบางอย่าง (เช่น$DISPLAY
) เพื่อให้ทำงานได้ssh -X
หรือไม่ ถ้าไม่ใช่เหตุผลคืออะไร? ขอบคุณ
คำตอบ:
คุณสามารถสร้างการเชื่อมต่อที่สองโดยเปิดใช้งานการส่งต่อ 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
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.
ตั้งค่า$DISPLAY
envvar และเพิ่มข้อมูล 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
-X
จะดีกว่าเล็กน้อย-Y
ใช่ไหม
-X
-Y
คนไม่ได้สังเกตว่าเพราะในหลาย ๆ ระบบ (เช่นเดเบียน) ForwardX11Trusted
ถูกตั้งค่าเป็นค่าyes
เริ่มต้น-X
และ-Y
ตัวเลือกและตัวเลือกจะเทียบเท่า ;-)
change $DISPLAY to
ไป ชื่อคำถามปัจจุบันไม่สามารถแสดงเต็มในผลการค้นหาและการเปลี่ยน $ DISPLAY เป็นส่วนหนึ่งของคำตอบไม่ใช่ส่วนหนึ่งของคำถาม