SSH X11 ไม่ทำงาน


15

ฉันมีคอมพิวเตอร์ที่บ้านและที่ทำงานคอมพิวเตอร์ที่บ้านมีที่อยู่ IP แบบคงที่

หากฉันใช้คอมพิวเตอร์จากที่ทำงานไปยังคอมพิวเตอร์ที่บ้านการเชื่อมต่อ ssh ใช้งานได้ แต่แอปพลิเคชั่น X11 ไม่ปรากฏขึ้น

ใน/etc/ssh/sshd_configบ้านของฉัน:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

ที่ทำงานฉันลองคำสั่งต่อไปนี้แล้ว:

xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP

/etc/ssh/ssh_configที่ทำงานของฉัน:

Host *
ForwardX11 yes 
ForwardX11Trusted yes

~/.ssh/configที่ทำงานของฉัน:

Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes

~/.Xauthorityที่ทำงานของฉัน:

-rw------- 1 azat azat 269 Jun  7 11:25 .Xauthority

~/.Xauthorityที่บ้านของฉัน:

-rw------- 1 azat azat 246 Jun  7 19:03 .Xauthority

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

หลังจากฉันทำการเชื่อมต่อ ssh กับบ้าน:

$ echo $DISPLAY
localhost:10.0

$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0

ฉันใช้iptablesที่บ้าน แต่ฉันอนุญาตให้ใช้พอร์ต 22 ตามที่ฉันได้อ่านนั่นคือทั้งหมดที่ฉันต้องการ

UPD กับ-vvv

...
debug2: เริ่มการโทรกลับ
debug2: x11_get_proto: / usr / bin / xauth รายการ: 0 2> / dev / null
debug1: การร้องขอการส่งต่อ X11 ด้วยการปลอมแปลงการตรวจสอบสิทธิ์
debug2: ช่องที่ 1: คำขอ x11-req ยืนยัน 1
debug2: client_session2_setup: id 1
debug2: fd 3 การตั้งค่า TCP_NODELAY
debug2: ช่องที่ 1: คำขอ pty-req ยืนยัน 1
...

เมื่อพยายามเปิดตัวkate:

debug1: client_input_channel_open: ctype x11 rchan 2 ชนะ 65536 สูงสุด 16384
debug1: client_request_x11: คำขอจาก 127.0.0.1 55486
debug2: fd 8 การตั้งค่า O_NONBLOCK
debug3: fd 8 คือ O_NONBLOCK
debug1: ช่องที่ 2: ใหม่ [x11]
debug1: ยืนยัน x11
debug2: การเชื่อมต่อ X11 ใช้โปรโตคอลการรับรองความถูกต้องที่แตกต่างกัน
การเชื่อมต่อ X11 ถูกปฏิเสธเนื่องจากการตรวจสอบที่ไม่ถูกต้อง
debug2: X11 ปฏิเสธ 2 i0 / o0
debug2: ช่องที่ 2: การอ่านล้มเหลว
debug2: ช่องที่ 2: close_read
debug2: channel 2: input open -> drain
debug2: channel 2: ibuf empty
debug2: ช่องที่ 2: ส่ง eof
debug2: channel 2: input drain -> ปิด
debug2: ช่องที่ 2: การเขียนล้มเหลว
debug2: ช่องที่ 2: close_write
debug2: channel 2: output open -> Closed
debug2: X11 ปิด 2 i3 / o3
debug2: ช่องที่ 2: ส่งปิด
debug2: channel 2: rcvd close
debug2: channel 2: is dead
debug2: ช่องที่ 2: การรวบรวมขยะ
debug1: channel 2: ฟรี: x11, nchannels 3
debug3: channel 2: status: การเชื่อมต่อต่อไปนี้เปิดอยู่:
  # 1 เซสชันลูกค้า (t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1)
  # 2 x11 (t7 r2 i3 / 0 o3 / 0 fd 8/8 cc -1)

# เช่นเดียวกับข้างต้นยกเลิกประมาณ 7 ครั้ง

kate: ไม่สามารถเชื่อมต่อกับ X server localhost: 10.0

UPD2 โปรดระบุหมายเลขการแจกจ่าย & รุ่น Linux ของคุณ
คุณใช้สภาพแวดล้อม GNOME หรือ KDE เริ่มต้นสำหรับ X หรืออย่างอื่นที่คุณกำหนดเอง

azat: ~ $ kded4 -version
Qt: 4.7.4
แพลตฟอร์มการพัฒนาของ KDE: 4.6.5 (4.6.5)
KDE Daemon: $ Id $

คุณเรียกใช้ ssh โดยตรงบนบรรทัดคำสั่งจากหน้าต่างเทอร์มินัลหรือไม่?
คุณใช้เทอร์มินัลอะไร xterm, gnome-terminal, หรือ?
คุณเริ่มใช้งานเทอร์มินัลในสภาพแวดล้อม X ได้อย่างไร จากเมนู? ฮอต? หรือ ?

จากเทอร์มินัลอีมูเลเตอร์ `yakuake '
กด `Ctrl + N` ด้วยตนเองและเขียนคำสั่ง

คุณสามารถเรียกใช้ xeyes จากหน้าต่างเทอร์มินัลเดียวกันที่ ssh -X ล้มเหลวได้หรือไม่?

`xeyes` - ไม่ได้ติดตั้ง
แต่ `kate 'หรือแอป kde อื่นกำลังทำงานอยู่

คุณเรียกใช้คำสั่ง ssh เช่นเดียวกับผู้ใช้ที่คุณเข้าสู่ระบบในเซสชัน X เป็นหรือไม่?
From the same user

UPD3

ฉันยังดาวน์โหลดsshแหล่งข้อมูลและใช้การdebug2()เขียนว่าเพราะเหตุใดจึงรายงานว่ารุ่นนั้นแตกต่างกัน
ดูคุกกี้บางอันและหนึ่งในนั้นว่างเปล่าอีกอันคือMIT-MAGIC-COOKIE-1

คำตอบ:


21

เหตุผลที่ส่งต่อ ssh X ไม่ทำงานเป็นเพราะฉันมี/etc/ssh/sshrcไฟล์กำหนดค่า

จุดสิ้นสุดของsshd(8)man page ระบุไว้:

หาก~/.ssh/rcมีอยู่ให้เรียกใช้ หาก/etc/ssh/sshrcมีอยู่ให้เรียกใช้ มิฉะนั้นรัน xauth

ดังนั้นฉันจึงเพิ่มคำสั่งต่อไปนี้/etc/ssh/sshrc(เช่นจากหน้าคน sshd) บนฝั่งเซิร์ฟเวอร์:

if read proto cookie && [ -n "$DISPLAY" ]; then
        if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
                # X11UseLocalhost=yes
                echo add unix:`echo $DISPLAY |
                    cut -c11-` $proto $cookie
        else
                # X11UseLocalhost=no
                echo add $DISPLAY $proto $cookie
        fi | xauth -q -
fi

และมันใช้งานได้!


คุณทำกับลูกค้าหรือฝั่งเซิร์ฟเวอร์?
alfonx

บนฝั่งเซิร์ฟเวอร์ (/ etc / SSH / sshrc ดำเนินการเมื่อลูกค้ามีการเชื่อมต่อ)
Azat

2

เมื่อใดก็ตามที่คุณมีปัญหากับ ssh สิ่งแรกที่คุณควรทำคือเรียกใช้ไคลเอนต์พร้อม-vตัวเลือกเพื่อให้ผลลัพธ์นั้นให้ผู้อื่นตรวจสอบ:

ssh -v user@somewhere

ฉันจะเดาว่าปัญหาอยู่ในระบบท้องถิ่นของคุณ คุณเรียกใช้คำสั่ง ssh ได้อย่างไร คุณใช้มันด้วยตัวเองในเปลือกหรือไม่? หรือมันจะถูกดำเนินการเป็นส่วนหนึ่งของสคริปต์หรือไม่? ไม่ว่าในกรณีใดคุณจะต้องตรวจสอบให้แน่ใจว่าระบบภายในของคุณมีการDISPLAYตั้งค่าสภาพแวดล้อมอย่างถูกต้อง นอกจากนี้ยังจำเป็นต้องตั้งค่าอย่างถูกต้องในด้านระยะไกลด้วยเช่นกัน แต่ค่านั้นจะแตกต่างกันในด้านระยะไกลกว่าด้านในเครื่อง

จากสิ่งที่คุณเขียนดูเหมือนว่ามีการตั้งค่าอย่างถูกต้องในโฮสต์ระยะไกล (และโดยการขยายการส่งต่อ X11 จะถูกตั้งค่าอย่างถูกต้องโดย ssh) บนระบบรีโมตคุณมี:

$ echo $DISPLAY
localhost:10.0

สิ่งที่แสดงในด้านท้องถิ่น? มันควรจะง่ายต่อการตรวจสอบว่าคุณอยู่ในเชลล์หรือไม่โดยการสะท้อนค่ารวมถึงการเริ่มต้นแอพ X จากเชลล์นั้น ... คุณสามารถใช้ค่าที่น่าเชื่อถือxeyesสำหรับการทดสอบประเภทนั้นได้แน่นอน! :)

ในทางกลับกันหากคุณกำลังเรียกใช้คำสั่ง ssh จากสคริปต์หรือต่อพ่วงกับฮ็อตคีย์มันอาจไม่สืบทอดสภาพแวดล้อมที่คุณคาดหวังดังนั้นDISPLAYตัวแปรสภาพแวดล้อมทางด้านโลคัลอาจไม่ถูกตั้งค่าเลย

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

สิ่งที่คุณควรเห็นในท้องถิ่นคือ:

$ echo $DISPLAY
:0.0

บนระบบกำหนดค่าอย่างถูกต้องหากคุณเปิดเชลล์คุณไม่จำเป็นต้องตั้งค่าด้วยตนเองมันควรจะได้รับมาจากสภาพแวดล้อมที่เริ่มต้นเชลล์ของคุณ อย่างไรก็ตามฉันได้เห็นการกำหนดค่าตัวจัดการหน้าต่าง / ฮอตคีย์ที่จัดการการสืบทอดตัวแปรสภาพแวดล้อมไม่ถูกต้อง หากคุณมีระบบ linux ทำงานอยู่gnome-sessionหรือkde-sessionคุณใช้เพื่อเรียกใช้เชลล์หรือสคริปต์จากนั้นตัวแปรสภาพแวดล้อมเซสชัน X ของคุณควรได้รับการตั้งค่าอย่างถูกต้องตามที่อธิบายไว้ในเอกสารของ Ubuntu เกี่ยวกับการสืบทอดตัวแปรสภาพแวดล้อม :

เมื่อกระบวนการหลักสร้างกระบวนการลูกตัวอย่างเช่นเมื่อเรารันคำสั่ง "gedit" จากเทอร์มินัลและ "bash" (กระบวนการหลัก) สร้าง "gedit" (กระบวนการลูก) กระบวนการเด็กสืบทอดตัวแปรสภาพแวดล้อมทั้งหมดและ ให้คุณค่ากับกระบวนการหลักที่มี

...

หมายเหตุ: ในสภาพแวดล้อมเดสก์ทอป Gnome แบบกราฟิก gnome-session เป็นกระบวนการหลักของกระบวนการทั้งหมดที่ทำงานบนเดสก์ท็อป ความจริงนี้ (พร้อมกับหลักการสืบทอด) เป็นกุญแจสำคัญในความสามารถของเราที่จะมีอิทธิพลอย่างมากต่อการทำงานของเดสก์ท็อปของเรากับตัวแปรสภาพแวดล้อม กระบวนการที่เทียบเท่าใน KDE คือ kde-session

ปรับปรุง

ssh -vvvขอขอบคุณสำหรับการโพสต์เอาท์พุทจาก ในกรณีนี้การใช้คำฟุ่มเฟื่อยพิเศษจาก-vvvเมื่อเทียบกับเพียงแค่-vเป็นประโยชน์ เอาต์พุตการดีบักบอกฉันว่าการส่งต่อ X11 ถูกตั้งค่าอย่างถูกต้อง:

debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1

แต่:0ในบรรทัดแรกทำให้ฉันเชื่อว่ายังมีข้อผิดพลาดการกำหนดค่าในด้านท้องถิ่นในแบบที่คุณเรียกใช้ ssh ในระบบหลายค่าเริ่มต้นสำหรับDISPLAYเป็นไม่ได้:0.0 :0คุณกำลังตั้งค่าDISPLAYด้วยตนเองก่อนที่จะเรียกใช้คำสั่ง ssh หรือไม่?

ข้อมูลเพิ่มเติมเกี่ยวกับระบบโลคัลของคุณและวิธีที่คุณเรียกใช้คำสั่ง ssh จะเป็นประโยชน์ ณ จุดนี้

  • โปรดระบุหมายเลขรุ่นและการกระจาย Linux ของคุณ
  • คุณใช้สภาพแวดล้อม GNOME หรือ KDE เริ่มต้นสำหรับ X หรืออย่างอื่นที่คุณกำหนดเอง
  • คุณเรียกใช้ ssh โดยตรงบนบรรทัดคำสั่งจากหน้าต่างเทอร์มินัลหรือไม่?
  • คุณใช้เทอร์มินัลอะไร xterm, gnome-terminal, หรือ?
  • คุณเริ่มใช้งานเทอร์มินัลในสภาพแวดล้อม X ได้อย่างไร จากเมนู? ฮอต? หรือ ?
  • คุณสามารถเรียกใช้xeyesจากหน้าต่างเทอร์มินัลเดียวกันกับที่ssh -Xล้มเหลวได้หรือไม่?
  • คุณเรียกใช้คำสั่ง ssh เช่นเดียวกับผู้ใช้ที่คุณเข้าสู่ระบบในเซสชัน X เป็นหรือไม่?

รายการสุดท้ายนี้มีความสำคัญ หากคุณใช้ ssh ในฐานะผู้ใช้รายอื่น (ตัวอย่างเช่นหากคุณเปิดหน้าต่างเทอร์มินัลรูทแทนที่จะเป็นหน้าต่างเทอร์มินัลผู้ใช้) คุณจะพบปัญหานี้แม้ว่าคุณจะตั้งค่าไว้อย่างชัดเจนDISPLAY=:0เนื่องจากคุณไม่มีสิทธิ์ เชื่อมต่อกับเซิร์ฟเวอร์ X โดยค่าเริ่มต้นในฐานะผู้ใช้คนอื่น (แม้เป็น root!)


อัปเดตเนื้อหาคำถาม
azat

ฉันได้เพิ่มส่วนUPDATEDใหม่ที่ขอข้อมูลเพิ่มเติมเพื่อช่วยแก้ไขข้อบกพร่องนี้เพิ่มเติม
aculich

ฉันไม่t set ได้แสดง ในความเป็นจริงฉันคิดว่าฉันเข้าใจว่าทำไมมันไม่ทำงานเพราะX -nolistenในเครื่องท้องถิ่น
azat

-nolistenไม่มีอะไรเกี่ยวข้องกับปัญหานี้ เท่าที่เกี่ยวข้องกับ X มันไม่รู้อะไรเลยเกี่ยวกับการเชื่อมต่อ ssh ระยะไกลของคุณ ในการ X ดูเหมือนว่าโปรแกรมท้องถิ่นอื่น ๆ
aculich

1
sshdยังสามารถเริ่มต้นในเบื้องหน้าด้วยความละเอียดเพิ่มเติมในกรณีที่ปัญหาอยู่ที่ฝั่งเซิร์ฟเวอร์
0xC0000022L

1

การกำหนดค่าของคุณดูเหมือนจะโอเค แต่ลอง "ssh -X home" ตามที่ Agemen แนะนำ

นอกจากนี้หากสิ่งอื่นล้มเหลวให้ลองทำดังนี้:

หลังจากคุณทำงานกับเครื่องที่บ้านจากที่ทำงานให้พิมพ์ "home":

xauth list

จากนั้นใน "งาน" ให้พิมพ์

xauth

ซึ่งจะให้พรอมต์ "xauth>" จากที่นี่ให้พิมพ์ "เพิ่ม" แล้วคัดลอกวางผลลัพธ์ของ "รายการ xauth" ทีละหนึ่งบรรทัด (แต่ละบรรทัดนำหน้าด้วย "เพิ่ม") ตัวอย่างเช่น:

someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0  MIT-MAGIC-COOKIE-1  781cc753194fd55ecdf6c4cf105c40e3
xauth> 

แจ้งให้เราทราบ.


ฉันได้ลองแล้วssh -X home(เขียนในโพสต์) เกี่ยวกับ xauth ฉันจะลองวันพรุ่งนี้
azat

ฉันลองxauth list & xauth addแต่ก็ยังใช้งานไม่ได้
azat

ฉันได้เพิ่มบันทึกนี้ทางxauth add azat/unix:10 MIT-MAGIC-COOKIE-1 ad01c582768c832ff591277b27863bc7(เพราะ $ DISPLAY = localhost: 10.0) ถ้าสิ่งนี้สามารถช่วยได้
azat

-1

ฉันไม่เข้าใจอย่างชัดเจนหากคุณต้องการแสดงแอพระยะไกลของคุณบนจอแสดงผลในเครื่อง ( work) หรือหากคุณต้องการแสดงแอประยะไกล ( home)

ในกรณีแรกฉันคิดว่าssh -X hostควรจะเพียงพอโดยไม่จำเป็นต้องใช้ xhost

ในกรณีที่สองระบบที่คุณต้องใช้ xhost คือhomeและไม่เพียงพอคุณต้องส่งออกตัวแปรการแสดงผลด้วย

xhost +work
export DISPLAY=:0.0

ฉันไม่แน่ใจในสิ่งที่คุณต้องการจะทำ ... และเนื่องจากฉันไม่รู้ว่าความแตกต่างระหว่างระบบของคุณและของฉันในมือแรกและการกำหนดค่าที่แน่นอนที่จำเป็นสำหรับคุณกรณีในทางตรงกันข้าม (เป็น ฉันไม่ใช่ผู้เชี่ยวชาญ ^ _ ^) หวังว่ามันจะช่วยคุณได้ในบางวิธีเนื่องจากการกำหนดค่าเช่นนี้ได้ผลสำหรับฉัน


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