SSH X11 काम नहीं कर रहा है


15

मेरे पास एक घर और काम करने वाला कंप्यूटर है, घर के कंप्यूटर में एक स्थिर आईपी पता है।

अगर मैं अपने काम के कंप्यूटर से अपने घर के कंप्यूटर पर ssh, 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 की अनुमति दी है। मैंने जो पढ़ा है, उसके अनुसार मुझे इसकी आवश्यकता है।

युपीडी। साथ में-vvv

...
debug2: कॉलबैक प्रारंभ
debug2: x11_get_proto: / usr / bin / xauth सूची: 0 2> / देव / 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: चैनल 2: इनपुट ओपन -> ड्रेन
debug2: चैनल 2: ibuf खाली
debug2: चैनल 2: eof भेजें
debug2: चैनल 2: इनपुट ड्रेन -> बंद
debug2: चैनल 2: लिखना विफल रहा
debug2: चैनल 2: close_write
debug2: चैनल 2: आउटपुट ओपन -> बंद
debug2: X11 2 i3 / o3 बंद हुआ
debug2: चैनल 2: पास भेजें
debug2: चैनल 2: rcvd करीब
debug2: चैनल 2: मर चुका है
debug2: चैनल 2: कचरा एकत्रित करना
debug1: चैनल 2: free: x11, nchannels 3
debug3: चैनल 2: स्थिति: निम्नलिखित कनेक्शन खुले हैं:
  # 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 बार दोहराएं

केट: एक्स सर्वर लोकलहोस्ट से कनेक्ट नहीं हो सकता: 10.0

UPD2 कृपया अपना लिनक्स वितरण और संस्करण संख्या प्रदान करें।
क्या आप X के लिए एक डिफ़ॉल्ट GNOME या KDE वातावरण का उपयोग कर रहे हैं या कुछ और जो आपने स्वयं को अनुकूलित किया है?

azat: ~ $ kded4 -version
Qt: 4.7.4
केडीई विकास मंच: 4.6.5 (4.6.5)
केडीई डेमन: $ आईडी $

क्या आप एक टर्मिनल विंडो से सीधे कमांड लाइन पर ssh का आह्वान कर रहे हैं?
आप किस टर्मिनल का उपयोग कर रहे हैं? xterm, सूक्ति-टर्मिनल, या?
आपने X वातावरण में चल रहे टर्मिनल की शुरुआत कैसे की? एक मेनू से? हॉटकी? या?

टर्मिनल एमुलेटर `याकुके` से
मैनुअल प्रेस 'Ctrl + N` और कमांड लिखें

क्या आप xeyes को उसी टर्मिनल विंडो से चला सकते हैं जहाँ ssh -X विफल रहता है?

`xeyes` - स्थापित नहीं है
लेकिन `केट` या एक और केडी ऐप चल रहा है

क्या आप ssh कमांड को उसी उपयोगकर्ता के रूप में शामिल कर रहे हैं जिसे आपने X सत्र में लॉग इन किया है?
From the same user

UPD3

मैं sshस्रोत भी डाउनलोड करता हूं , और debug2()लेखन का उपयोग करके यह रिपोर्ट करता
हूं कि संस्करण अलग है यह कुछ कुकीज़ देखता है, और उनमें से एक खाली है, दूसरा हैMIT-MAGIC-COOKIE-1

जवाबों:


21

Ssh X अग्रेषित करने का कारण काम नहीं कर रहा था, क्योंकि मेरे पास एक /etc/ssh/sshrcकॉन्फ़िगर फ़ाइल है।

sshd(8)मैन पेज का अंत बताता है:

अगर ~/.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

और यह काम करता है!


आप इसे क्लाइंट पर या सर्वर साइड पर करते हैं?
अल्फोंक्स

एक सर्वर साइड पर। (/ etc / ssh / sshrc निष्पादित किया जाता है जब ग्राहक जुड़ा हुआ है)
azat

2

किसी भी समय आपको ssh से परेशानी हो रही है, पहली चीज जो आपको करनी चाहिए वह है ग्राहक को -vविकल्प के साथ उस आउटपुट को चलाने के लिए दूसरों के लिए निरीक्षण करने के लिए:

ssh -v user@somewhere

मैं यह अनुमान लगाने जा रहा हूं कि समस्या आपके स्थानीय सिस्टम पर है। आप ssh कमांड को कैसे लागू कर रहे हैं? क्या आप इसे शेल में मैन्युअल रूप से चला रहे हैं? या यह एक स्क्रिप्ट के हिस्से के रूप में निष्पादित किया जा रहा है? किसी भी स्थिति में आप यह सुनिश्चित करना चाहेंगे कि आपके स्थानीय सिस्टम में DISPLAYपर्यावरण ठीक से सेट हो। इसे रिमोट साइड पर भी सही तरीके से सेट करने की आवश्यकता होती है, लेकिन यह मूल्य स्थानीय पक्ष की तुलना में रिमोट साइड पर अलग होगा

आपने जो लिखा है उससे ऐसा लगता है कि इसे दूरस्थ होस्ट पर सही तरीके से सेट किया जा रहा है (और X11 अग्रेषण को ssh द्वारा सही तरीके से सेट किया जा रहा है)। आपके पास रिमोट सिस्टम पर:

$ echo $DISPLAY
localhost:10.0

वह क्या है जो स्थानीय तरफ दिखा रहा है? यह जांचना आसान होना चाहिए कि क्या आप एक शेल में हैं, जो मूल्य को प्रतिध्वनित करने के साथ-साथ उस शेल से एक एक्स ऐप शुरू कर रहा है ... आप हमेशा xeyesउस तरह के परीक्षण के लिए आदरणीय का उपयोग कर सकते हैं , बिल्कुल! :)

दूसरी ओर, यदि आप किसी स्क्रिप्ट से ssh कमांड को ला रहे हैं या हॉटकी से अटैच है तो यह उस पर्यावरण को प्राप्त नहीं कर सकता है, जिसकी आप अपेक्षा करते हैं, इसलिए DISPLAYहो सकता है कि स्थानीय तरफ का वातावरण चर बिल्कुल सेट न हो।

इसके अलावा, जब से यह लगता है कि आप अपनी .Xauthorityफ़ाइल के साथ फ़िडलिंग कर रहे हैं, तो आप इसे पूरी तरह से हटाना चाहते हैं, फिर अपने एक्स सत्र से लॉग आउट करें और वापस लॉग इन करें ताकि यह स्वचालित रूप से इसे फिर से बनाए। शायद ही कभी आपके साथ घुलने-मिलने की जरूरत होती है .Xauthority, इसलिए कोशिश करना कि सिर्फ एक हताश उपाय है जो मदद नहीं करेगा।

आपको स्थानीय पक्ष पर क्या देखना चाहिए:

$ echo $DISPLAY
:0.0

यदि आप एक शेल खोलते हैं, तो इसे ठीक से कॉन्फ़िगर करने की प्रणाली पर आपको इसे हाथ से सेट करने की आवश्यकता नहीं है, इसे आपके शेल को शुरू करने वाले वातावरण से विरासत में प्राप्त करना चाहिए। हालाँकि मैंने विंडो मैनेजर / हॉटकी कॉन्फिगर्स को देखा है जो कि एनवायरनमेंट वेरिएबल इनहेरिटेंस को ठीक से हैंडल नहीं करते हैं। यदि आपके पास लिनक्स सिस्टम चल रहा है gnome-sessionया kde-sessionआप अपने गोले या स्क्रिप्ट को लॉन्च करने के लिए उपयोग करते हैं, तो आपके X सत्र वातावरण चर को उबंटू प्रलेखन में पर्यावरण चर के बारे में वर्णित रूप से सही ढंग से सेट किया जाना चाहिए :

जब कोई पेरेंट प्रक्रिया एक चाइल्ड प्रोसेस बनाता है, उदाहरण के लिए जब हम टर्मिनल से "gedit" कमांड चलाते हैं और "bash" (पेरेंट प्रोसेस) "gedit" (चाइल्ड प्रोसेस) क्रिएट करते हैं, तो चाइल्ड प्रोसेस सभी पर्यावरण वेरिएबल्स को इनहेरिट करता है। मूल प्रक्रिया का मान था।

...

नोट: सूक्ति ग्राफिकल डेस्कटॉप वातावरण में, सूक्ति सत्र डेस्कटॉप पर चलने वाली सभी प्रक्रियाओं की मूल प्रक्रिया है। यह तथ्य (इनहेरिटेंस सिद्धांत के साथ) पर्यावरणीय चर के साथ हमारे डेस्कटॉप के संचालन को शक्तिशाली रूप से प्रभावित करने की हमारी क्षमता की कुंजी है। KDE में समकक्ष प्रक्रिया kde-session है।

UPDATED

से आउटपुट पोस्ट करने के लिए धन्यवाद 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। क्या आप किसी तरह DISPLAYssh कमांड को इनवॉइस करने से पहले मैन्युअल रूप से स्वयं का मान सेट कर रहे हैं ?

आपके स्थानीय सिस्टम के बारे में अधिक जानकारी और आप ssh कमांड को कैसे लागू कर रहे हैं, इस बिंदु पर उपयोगी होगा।

  • कृपया अपना लिनक्स वितरण और संस्करण संख्या प्रदान करें।
  • क्या आप X के लिए एक डिफ़ॉल्ट GNOME या KDE वातावरण का उपयोग कर रहे हैं या कुछ और जो आपने स्वयं को अनुकूलित किया है?
  • क्या आप एक टर्मिनल विंडो से सीधे कमांड लाइन पर ssh का आह्वान कर रहे हैं?
  • आप किस टर्मिनल का उपयोग कर रहे हैं? xterm, सूक्ति-टर्मिनल, या?
  • आपने X वातावरण में चल रहे टर्मिनल की शुरुआत कैसे की? एक मेनू से? हॉटकी? या?
  • क्या आप xeyesउसी टर्मिनल विंडो से भाग सकते हैं जहां ssh -Xविफल रहता है?
  • क्या आप ssh कमांड को उसी उपयोगकर्ता के रूप में शामिल कर रहे हैं जिसे आपने X सत्र में लॉग इन किया है?

यह अंतिम आइटम महत्वपूर्ण है। यदि आप किसी अन्य उपयोगकर्ता के रूप में ssh चला रहे हैं (उदाहरण के लिए, यदि आपने उपयोगकर्ता टर्मिनल विंडो के बजाय रूट टर्मिनल विंडो खोली है), तो आपको इस समस्या का सामना करना पड़ेगा, भले ही आप स्पष्ट रूप से सेटिंग कर रहे हों DISPLAY=:0क्योंकि आपके पास अनुमतियाँ नहीं हैं किसी अन्य उपयोगकर्ता (यहां तक ​​कि रूट के रूप में) डिफ़ॉल्ट रूप से एक्स सर्वर से कनेक्ट करें!


अपडेट बॉडी
azat

मैंने एक नया अद्यतन अनुभाग जोड़ा जिसमें आगे डीबग करने के लिए अधिक जानकारी मांगी गई है।
अकुलिच

मैं t set DISPLAY` मैनुअल का दान नहीं करता। वास्तव में मुझे लगता है कि मैं समझता हूं कि यह काम नहीं करता है, क्योंकि X -nolistenस्थानीय मशीन पर
अज़ात

-nolistenइस समस्या से कोई लेना देना नहीं है। जहाँ तक X का संबंध है, यह आपके दूरस्थ ssh कनेक्शन के बारे में कुछ नहीं जानता है। एक्स के लिए यह किसी अन्य स्थानीय कार्यक्रम की तरह दिखता है।
एसुलिच

1
sshdसमस्या के सर्वर-साइड पर होने की स्थिति में अतिरिक्त क्रियाशीलता के साथ अग्रभूमि में भी शुरू किया जा सकता है।
0xC0000022L

1

आपके विन्यास ठीक प्रतीत होते हैं, लेकिन "ssh-x होम" को आजमाएं जैसा कि Agemen ने सुझाव दिया है।

इसके अलावा, यदि अन्य सभी विफल होते हैं, तो यह प्रयास करें:

काम से अपने घर की मशीन पर जाने के बाद, "होम" प्रकार पर:

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 के बारे में मैं कल कोशिश करूंगा।
अज़ात

मैं कोशिश xauth list & xauth addकरता हूं , लेकिन फिर भी काम नहीं करता है
अज़ात

मैंने इस रिकॉर्ड को जोड़ दिया है xauth add azat/unix:10 MIT-MAGIC-COOKIE-1 ad01c582768c832ff591277b27863bc7(क्योंकि $ DISPLAY = लोकलहोस्ट: 10.0), अगर यह मदद कर सकता है
azat

-1

यदि आप अपने दूरस्थ एप्लिकेशन को अपने स्थानीय डिस्प्ले ( work) पर दिखाना चाहते हैं, या यदि आप उन्हें दूरस्थ सिस्टम ( home) पर प्रदर्शित करना चाहते हैं तो मुझे स्पष्ट रूप से समझ में नहीं आता है ।

पहले मामले में, मुझे लगता है कि ssh -X hostxhost का उपयोग करने की आवश्यकता के बिना, पर्याप्त होना चाहिए।

दूसरे मामले में, सिस्टम जहां आपको xhost का उपयोग करने की आवश्यकता है home, और यह पर्याप्त नहीं है, आपको प्रदर्शन चर भी निर्यात करने की आवश्यकता है।

xhost +work
export DISPLAY=:0.0

मैं पूरी तरह से आश्वस्त नहीं हूं कि आप क्या करना चाहते हैं ... और जैसा कि मुझे नहीं पता कि आपके सिस्टम और मेरे बीच, पहले हाथ पर क्या अंतर हैं, और दूसरी तरफ आपके लिए सटीक कॉन्फ़िगरेशन आवश्यक है (जैसा कि मैं विशेषज्ञ नहीं हूं ^ _ ^)। आशा है कि यह आपको कुछ मायनों में मदद करेगा, क्योंकि इस विन्यास ने भी मेरे लिए काम किया है।


मैंने पहले ही कोशिश की है ssh -X home(पोस्ट में लिखें)। हां मैं अपने स्थानीय डिस्प्ले पर दूरस्थ एप्लिकेशन प्रदर्शित करना चाहता हूं।
अज़ात
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.