“ su” ที่มีข้อผิดพลาด“ การเชื่อมต่อ X11 ถูกปฏิเสธเนื่องจากการรับรองความถูกต้องผิดพลาด”


52

ในฐานะที่เป็น root ฉันกำลังเชื่อมต่อกับรีโมตโฮสต์เพื่อดำเนินการคำสั่ง เฉพาะ "standarduser" เท่านั้นที่มี id-file ที่ถูกต้องและถูกต้อง. ssh / config ดังนั้นฉันจะเปลี่ยนผู้ใช้ก่อน:

su standarduser -c 'ssh -x remotehost ./remotecommand'

คำสั่งทำงานได้ดี แต่ถึงแม้ว่าฉันจะใช้ "-x" (ปิดการใช้งานการส่งต่อ X11) และการปิดการใช้งาน X11Forward ใน/etc/ssh/ssh_configฉันยังคงได้รับข้อความแสดงข้อผิดพลาด:

X11 connection rejected because of wrong authentication.

ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดเมื่อฉันเข้าสู่ระบบในฐานะ "ผู้ใช้มาตรฐาน"

มันค่อนข้างน่ารำคาญเพราะฉันต้องการรวมคำสั่งในไฟล์งาน cron ฉันเข้าใจว่าข้อความแสดงข้อผิดพลาดอ้างถึงการตรวจสอบความถูกต้องที่ผิดพลาดของไฟล์. XAuth ของรูท แต่ฉันไม่ได้พยายามเชื่อมต่อผ่าน X11

ทำไม "ssh -x" ไม่ปิดการใช้งานการเชื่อมต่อ X11 และทิ้งข้อความข้อผิดพลาด?

UPDATE : ข้อความจะแสดงเฉพาะเมื่อฉันเข้าสู่ระบบภายในหน้าจอเมื่อใช้คำสั่งที่ระบุไว้ข้างต้นในเครื่องท้องถิ่น (ไม่มีหน้าจอ) ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดดังนั้นสิ่งนี้ควรจะดีกับ cron ด้วย .

ฉันยังเริ่มต้นคำสั่งเดียวกันด้วย-vและได้รับข้อความแสดงข้อผิดพลาด FIRST ก่อนหน้าข้อมูลสถานะจาก SSH:

root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013

สิ่งนี้ทำให้ฉันมีปัญหากับตัวเองไม่ใช่สิ่งsshที่กำลังทิ้งข้อความแสดงข้อผิดพลาดนั่นคือsu:

root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi

เหตุใดฉันจึงได้รับข้อผิดพลาดนี้ภายในscreenเท่านั้น ฉันจะปิดใช้งานข้อความแสดงข้อผิดพลาดนี้ได้อย่างไร


เรียกใช้คำสั่งอีกครั้งและเพิ่ม-vไปยังตัวเลือก ssh แล้ววางผลลัพธ์ลงในคำถามของคุณ
เจนนี่ D

คำตอบ:


79

ดูเหมือนว่ารากของคุณขาดบาง X11 คุกกี้มายากลใน.Xauthorityที่คุณstandarduserมี นี่คือวิธีแก้ไขปัญหานี้

SHORT VERSION (ขอบคุณ@bmaupin )

standarduser@localhost:~$ xauth list | grep unix`echo $DISPLAY | cut -c10-12` > /tmp/xauth
standarduser@localhost:~$ sudo su
root@localhost:~$ xauth add `cat /tmp/xauth`

ความสนใจ:ตรวจสอบ backticks! พวกเขาไม่สามารถแทนที่ด้วยคำพูด! คุณต้องsudoติดตั้งเพื่อดำเนินการคำสั่งที่สองต่อไป!

รุ่นยาวดั้งเดิม

เมื่อต้องการแก้ไขสิ่งต่าง ๆ อันดับแรกให้ตรวจสอบว่าหมายเลขที่แสดงstandarduserใช้:

standarduser@localhost:~$ echo $DISPLAY
localhost:21.0

21.0ในกรณีนี้มันเป็น ประการที่สองแสดงstandarduserรายการคุกกี้:

standarduser@localhost:~$ xauth list
localhost/unix:1  MIT-MAGIC-COOKIE-1  51a3801fd7776704575752f09015c61d
localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f
localhost/unix:22  MIT-MAGIC-COOKIE-1  22ba6595c270f20f6315c53e27958dfe
localhost/unix:20  MIT-MAGIC-COOKIE-1  267f68b51726a8a381cfc10c91783a13

คุกกี้สำหรับการแสดงผลเป็นที่สองในรายการและจบลงด้วยการ21.0104f

สิ่งสุดท้ายที่ต้องทำคือการเพิ่มคุกกี้เฉพาะนี้ไปที่รู.Xauthorityท ล็อกอินด้วยรูทและทำสิ่งต่อไปนี้:

root@localhost:~$ xauth add localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f

นี่คือวิธีที่คุณสามารถลดX11 connection rejected because of wrong authenticationข้อผิดพลาดเมื่อคุณเรียกใช้เป็นผู้ใช้ที่แตกต่างกันในสคริปต์ทุบตีหรือsuscreen

ขอบคุณผู้ชายคนนี้สำหรับแรงบันดาลใจ


น่าสนใจ ฉันลองสิ่งนั้น แต่นั่นก็ไม่ได้ผลสำหรับฉันเช่นกัน ในกรณีเฉพาะของฉันฉันสามารถเปิดใช้งานได้เกือบทุกอย่าง (xterm อื่น, VirtualBox) แต่ฉันไม่สามารถเปิด gedit (ฉันได้รับข้อผิดพลาดเดียวกัน) อย่างไรก็ตามถ้าฉันเปลี่ยนเป็นรูทฉันสามารถเปิด gedit ได้ ฉันทำตามคำแนะนำในจดหมาย แต่ไม่มีอะไร อย่างอื่นจะต้องผิดพลาด
luis.espinal

@ luis.espinal หวังว่ามีคนแนะนำวิธีแก้ปัญหาเฉพาะของคุณ
TranslucentCloud

1
รุ่นยาวทำงานเหมือนมีเสน่ห์ แต่รุ่นสั้น ๆ มีข้อผิดพลาดบน centos ด้วย "xauth: (argv): 1: แย่" เพิ่ม "บรรทัดคำสั่ง"
Sam

1
เวอร์ชั่นสั้นทำงานสำหรับฉันใน centos 7
tdc

1
บน Ubuntu เวอร์ชั่นสั้น 18.04.1 ใช้งานได้ดี
Simakis Panagiotis

38

ทางออกที่ง่ายขึ้น:

1.- ssh user@host

2.- $ sudo su

3.- # xauth merge /home/user/.Xauthority

นั่นคือทั้งหมดที่

แน่นอน$DISPLAYต้องตั้งค่าตัวแปร


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

สิ่งนี้ใช้ได้สำหรับฉันในขณะที่คำตอบของ @ TranslucentCloud ไม่ได้ ฉันเริ่มพบปัญหาในขณะที่พยายามเรียกใช้ตัวจัดการ SDK Android เป็นรากจากบรรทัดคำสั่ง FYI
scottyseus

2
นี่ไม่ได้ผลสำหรับฉันตั้งแต่xauth: file /root/.Xauthority does not exist
tdc

2
tdc นั่นเป็นเพียงการเตือนไม่ใช่ข้อผิดพลาด xauth จะสร้างไฟล์ - หากคุณเรียกใช้คำสั่งเป็นครั้งที่สองคุณจะไม่เห็นมัน
Vladimir Panteleev

1
ใครต้องเรียนรู้อะไรเมื่อคุณสามารถคัดลอกและวางได้! ขอบคุณ! วิธีง่ายกว่า
ไซเรน

7

ความต้องการของฉันแตกต่างกันเล็กน้อยดังนั้นฉันจึงคิดวิธีที่แตกต่างออกไปเล็กน้อย ฉันต้องการความสามารถในการเรียกใช้แอป X11 ในฐานะผู้ใช้รายอื่น (ที่ไม่ใช่รูท) ใช้ CentOS ดังนั้นฉันไม่มีเครื่องมือ gksudo หวาน ๆ ที่สุนัขผู้โชคดีที่ใช้อูบุนตูซึ่งใช้เวทย์มนตร์ Xauth

ฉันไม่ต้องการแยกสคริปต์ที่กำหนดเองเพียงเพื่อเข้าสู่ระบบสลับผู้ใช้และเรียกใช้แอป ที่ดูเหมือนจะไม่จำเป็นสำหรับฉัน

ขั้นตอนแรก:

อนุญาตให้ดำเนินการ $ XAUTHORITY ข้ามเซสชัน sudo

เพิ่มบรรทัดนี้ภายใต้คำสั่ง env_keep ที่เหลือใน / etc / sudoers:

Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"

ขั้นตอนที่สอง:

อนุญาตให้ผู้ใช้เป้าหมายของคุณสามารถอ่าน. Xauthority ของคุณ (ใช่ฉันรู้แล้วกรีดร้องความปลอดภัย! ทั้งหมดที่คุณต้องการ) สำหรับผู้ที่ต้องการความสามารถในการเรียกใช้คำสั่งในฐานะรูทสามารถข้ามได้

ผู้ใช้เป้าหมายแชร์กลุ่มเดียวกันกับฉันดังนั้นฉันจึงเปิดสิทธิ์การอ่านกลุ่ม:

$ chmod g+r user ~/.Xauthority

ขั้นตอนที่สาม:

CentOS จะไม่เติมมูลค่าของ $ XAUTHORITY ตามค่าเริ่มต้น เพิ่มบรรทัดในโปรไฟล์ของคุณ (mine คือ ~ / .bash_profile):

export XAUTHORITY=$HOME/.Xauthority

แค่นั้นแหละ. ไม่มีการปรับแต่งเพิ่มเติม ไม่มีการเขียน. XML เพื่อให้ PolicyKit ทำงาน ไม่มีสคริปต์ที่ทำงานอยู่สำหรับการเข้าสู่ระบบแต่ละครั้ง ไม่ต้อง sudo สองครั้งเพื่อคัดลอก xauth จากที่นี่ไปคุณสามารถ:

$ sudo -u user xcalc

ใช้งานได้ดีกับ MobaXTerm


นี่เป็นสิ่งที่ฉันต้องการในการแก้ปัญหาที่เกิดขึ้นกับการใช้ VM console บน CentOS 7 ฉันต้องการทำขั้นตอนที่สามเพื่อจุดประสงค์ของฉันเท่านั้น (และแน่นอนต้องแน่ใจว่า X11Forwarding ตั้งค่าเป็นใช่ใน / etc / SSH / sshd_config) ขอบคุณ
darklion

น่ากลัว! นี่คือคำตอบ! ขอบคุณ @W Smith
tmow

1

คุณควรเปลี่ยนไปใช้ผู้ใช้เป้าหมายอย่างเต็มที่เช่นใช้ " -" กับsu( su - standarduser ...) มิเช่นนั้นข้อมูล X ของรูทจะถูกลากไปรอบ ๆ ในสภาพแวดล้อม


0

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

สมมติว่าฉันใช้ตัวเลือก -Y

#!/bin/bash  
if [[ $DISPLAY =~ localhost(:[[:digit:]]+) ]] ;then
    port=${BASH_REMATCH[1]}
else
    echo "Unexpected DISPLAY $DISPLAY"
    exit 1
fi
h=$(hostname)
cookie=$(xauth list|grep $h.*$port)
sudo -i xauth -i add $cookie
sudo -i $*

บรรทัดcookie=$(xauth list|grep $h.*$port)อาจตรงกว่าที่ตั้งใจไว้ถ้า $ port เป็นส่วนหนึ่งของค่าคุกกี้ ที่ปลอดภัยคือหรือcookie=$(xauth list) cookie=${c%% *} cookie=$(xauth list |grep $h[^ ]*$port)
PePa

0

ในกรณีของฉันเมื่อฉันพบข้อผิดพลาดนั้นฉันมีไดเรกทอรีผู้ใช้ที่เข้ารหัส หลังจากโทรecrypt-mount-privateมันกำจัดข้อผิดพลาดและอนุญาตให้ฉันส่งต่อ X11 ต่อไป

เพื่อตรวจสอบว่าโฟลเดอร์ที่บ้านของคุณจะถูกเข้ารหัสคุณสามารถลองนี้ (ตามคำตอบนี้ls -A /home ): หากคุณเห็น.ecryptfsโฟลเดอร์ไดเรกทอรีหลักของคุณอาจถูกเข้ารหัสซึ่งในกรณีนี้คุณสามารถลองทำคำสั่งที่ฉันใส่ไว้ในตอนต้นของคำตอบ

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