दूर से ग्राफिक्स अनुप्रयोगों को चलाने के लिए SSH पर X कैसे अग्रेषित करें?


342

मेरे पास एक मशीन है जो उबंटू चला रही है जिसे मैं अपने फेडोरा 14 मशीन से एसएसएच करता हूं। मैं X को उबंटू मशीन से फेडोरा में वापस भेजना चाहता हूं ताकि मैं दूर से ग्राफिकल प्रोग्राम चला सकूं। दोनों मशीनें एक LAN पर हैं।

मुझे पता है कि -Xविकल्प SSH में X11 को अग्रेषित करने में सक्षम बनाता है, लेकिन मुझे लगता है कि मैं कुछ चरणों को याद कर रहा हूं।

एसएसएच के ऊपर एक उबंटू मशीन से फेडोरा तक एक्स को अग्रेषित करने के लिए आवश्यक कदम क्या हैं?


6
मुझे पता है कि यह सामान्य है, लेकिन मैं मुद्दों पर चल रहा हूं। इस प्रश्न का एक निश्चित उत्तर कई लोगों के लिए मददगार होगा। चारों ओर के उदाहरण महत्वपूर्ण विवरणों को छोड़ देते हैं।
श्री शिखाडांस

जवाबों:


411

X11 अग्रेषण को क्लाइंट साइड और सर्वर साइड दोनों पर सक्षम करने की आवश्यकता होती है।

पर ग्राहक के पक्ष , -X(राजधानी एक्स) विकल्प के लिए sshX11 अग्रेषण सक्षम बनाता है, और आप के साथ इस डिफ़ॉल्ट (सभी कनेक्शनों के लिए या के लिए एक विशिष्ट कनेक्शन के टूटने) कर सकते हैं ForwardX11 yesमें ~/.ssh/config

पर सर्वर साइड , X11Forwarding yesमें निर्दिष्ट करना होगा /etc/ssh/sshd_config। ध्यान दें कि डिफ़ॉल्ट कोई फ़ॉरवर्डिंग नहीं है (कुछ वितरण इसे अपने डिफ़ॉल्ट में चालू करते हैं /etc/ssh/sshd_config), और उपयोगकर्ता इस सेटिंग को ओवरराइड नहीं कर सकता है।

xauthकार्यक्रम सर्वर साइड पर स्थापित किया जाना चाहिए। यदि कोई X11 कार्यक्रम वहाँ हैं, तो यह बहुत संभावना है कि xauthवहाँ होगा। xauthगैर-मानक स्थान में असंभावित मामले में स्थापित किया गया था, इसे ~/.ssh/rc(सर्वर पर!) कहा जा सकता है ।

ध्यान दें कि आपको सर्वर पर किसी भी पर्यावरण चर को सेट करने की आवश्यकता नहीं है। DISPLAYऔर XAUTHORITYस्वचालित रूप से उनके उचित मूल्यों पर सेट हो जाएगा। यदि आप ssh चलाते हैं और DISPLAYसेट नहीं है, तो इसका मतलब है कि ssh X11 कनेक्शन को अग्रेषित नहीं कर रहा है।

यह पुष्टि करने के लिए कि ssh X11 को अग्रेषित कर रहा है, आउटपुट Requesting X11 forwardingमें एक लाइन की जाँच करें ssh -v -X। ध्यान दें कि सर्वर किसी भी तरह से उत्तर नहीं देगा , संभावित हमलावरों से विवरण छिपाने का एक सुरक्षा एहतियात।


31
@user: नहीं, आपको कभी ज़रूरत नहीं है xhost +xhostएक जेंटलर युग से है जब नेटवर्क से जुड़ी एक मशीन होने का मतलब था कि आप भरोसेमंद थे। xhost +इसका मतलब है कि कोई भी जो आपका आईपी खराब कर सकता है वह आपके एक्स सर्वर सत्र का नियंत्रण ले सकता है। ssh -Xसभी आवश्यक प्राधिकरण स्थापित करेगा। यदि सर्वर कॉन्फ़िगरेशन में अक्षम X11 अग्रेषण, अपने व्यवस्थापक से बात करें; यदि वह काम नहीं करता है, तो SSH पर अग्रेषण X11 देखें यदि सर्वर कॉन्फ़िगरेशन इसकी अनुमति नहीं देता है
गाइल्स

6
Xauth का उल्लेख करने के लिए धन्यवाद! एक नंगे पैर सर्वर पर कमी मुझे परेशान कर रही थी।
वासी

5
के बीच अंतर करने के लिए +1 ~/.ssh/configऔर /etc/ssh/sshd_configएक ही स्थान पर। मैं नहीं बता सकता था कि वे अलग-अलग फाइलें थीं या केवल नामकरण में बदलाव।
7:13

1
@KhurshidAlam यह कोई फर्क नहीं पड़ता कि सर्वर भी GUI वातावरण चला रहा है। .Xauthorityफ़ाइल पर अनुमतियों की जाँच करें । यदि Red Hat या SELinux के साथ अन्य सिस्टम का उपयोग कर रहे हैं, तो SELinux संदर्भ की जाँच करें, देखें unix.stackexchange.com/questions/36540/…
Gilles

8
अंतिम परीक्षण के रूप में एक ग्राफिकल टर्मिनल प्राप्त करने के लिए ssh -Xचलाने के बाद xterm &यह देखने के लिए कि क्या यह काम कर रहा है।
अलेक्जेंडर टेलर

87

X11 अग्रेषण को ssh पर काम करने के लिए, आपको 3 चीजों की आवश्यकता होगी।

  1. आपके ग्राहक को X11 अग्रेषित करने के लिए सेट किया जाना चाहिए।
  2. X11 अग्रेषण की अनुमति देने के लिए आपका सर्वर सेट होना चाहिए।
  3. आपका सर्वर X11 प्रमाणीकरण सेट करने में सक्षम होना चाहिए।

यदि आपके पास # 1 और # 2 दोनों जगह हैं, लेकिन # 3 गायब हैं, तो आप एक खाली प्रदर्शन पर्यावरण चर के साथ समाप्त करेंगे।

सूप-टू-नट्स, यहां बताया गया है कि X11 को आगे काम करते हुए कैसे प्राप्त किया जाए।

  1. अपने सर्वर पर, सुनिश्चित करें कि / etc / ssh / sshd_config में शामिल हैं:

    X11Forwarding yes
    X11DisplayOffset 10
    

    आपको SIGHUP sshd की आवश्यकता हो सकती है इसलिए यह इन परिवर्तनों को उठाता है।

    cat /var/run/sshd.pid | xargs kill -1
    
  2. अपने सर्वर पर, सुनिश्चित करें कि आपने xauth स्थापित किया है।

    belden@skretting:~$ which xauth
    /usr/bin/xauth
    

    यदि आपके पास xauth स्थापित नहीं है, तो आप "खाली प्रदर्शन पर्यावरण चर" समस्या में भाग लेंगे।

  3. अपने क्लाइंट पर, अपने सर्वर से कनेक्ट करें। X11 अग्रेषण की अनुमति देने के लिए ssh को बताना निश्चित करें। मैं पसंद करता हूं

    belden@skretting:~$ ssh -X blyman@the-server
    

लेकिन आप पसंद कर सकते हैं

    belden@skretting:~$ ssh -o ForwardX11=yes blyman@the-server

या आप इसे अपने ~ / .ssh / config में सेट कर सकते हैं।


मैं आज इस खाली प्रदर्शन पर्यावरण चर में चल रहा था जब मैं एक नया सर्वर है कि मैं प्रशासित नहीं ssh'ing। लापता xauth भाग को ट्रैक करना थोड़ा मज़ेदार था। यहाँ मैंने क्या किया, और आप भी कर सकते हैं।

अपने स्थानीय कार्य केंद्र पर, जहां मैं एक प्रशासक हूं, मैंने सत्यापित किया कि X11 को अग्रेषित करने के लिए / etc / ssh / sshd_config स्थापित किया गया था। जब मैं लोकलहोस्ट में वापस ssh -X करता हूं, तो मुझे मेरा DISPLAY सेट सही से मिल जाता है।

परेशान होने के लिए मजबूर करना बहुत कठिन नहीं था। मुझे सिर्फ यह देखना है कि इसे सही तरीके से सेट करने के लिए sshd और ssh क्या कर रहे हैं। यहाँ मेरे द्वारा किए गए सब कुछ का पूरा आउटपुट है।

    blyman@skretting:~$ mkdir ~/dummy-sshd
    blyman@skretting:~$ cp -r /etc/ssh/* ~/dummy-sshd/
    cp: cannot open `/etc/ssh/ssh_host_dsa_key' for reading: Permission denied
    cp: cannot open `/etc/ssh/ssh_host_rsa_key' for reading: Permission denied

मेरे ssh_host_ {dsa, rsa} _key फ़ाइलों को कॉपी करने के लिए मजबूर करने के लिए sudo का उपयोग करने के बजाय, मैंने ssh-keygen का उपयोग अपने लिए डमी बनाने के लिए किया।

    blyman@skretting:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_host_rsa_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.
    Your public key has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.pub.

कुल्ला और बार-बार dsa के साथ:

    blyman@skretting:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_host_dsa_key
    # I bet you can visually copy-paste the above output down here

सही नई ssh_host कुंजी फ़ाइलों को इंगित करने के लिए ~ / dummy-sshd / sshd_config संपादित करें।

    # before
    blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config 
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key

    # after
    blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config 
    HostKey /home/blyman/dummy-sshd/ssh_host_rsa_key
    HostKey /home/blyman/dummy-sshd/ssh_host_dsa_key

नॉन-डिटैच मोड में एक नए पोर्ट पर sshd फायर करें:

    blyman@skretting:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    sshd re-exec requires execution with an absolute path

वूप्स, बेहतर उस रास्ते को सही:

    blyman@skretting:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
    debug1: read PEM private key done: type RSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
    debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
    debug1: private host key: #0 type 1 RSA
    debug1: read PEM private key done: type DSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
    debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
    debug1: private host key: #1 type 2 DSA
    debug1: setgroups() failed: Operation not permitted
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-p'
    debug1: rexec_argv[2]='50505'
    debug1: rexec_argv[3]='-f'
    debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
    debug1: rexec_argv[5]='-d'
    Set /proc/self/oom_adj from 0 to -17
    debug1: Bind to port 50505 on 0.0.0.0.
    Server listening on 0.0.0.0 port 50505.
    debug1: Bind to port 50505 on ::.
    Server listening on :: port 50505.

पोर्ट 50505 पर लोकलहोस्ट में नया टर्मिनल और ssh पॉप करें:

    blyman@skretting:~$ ssh -p 50505 localhost
    The authenticity of host '[localhost]:50505 ([::1]:50505)' can't be established.
    RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
    Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
    Ubuntu 10.10

    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/

    1 package can be updated.
    0 updates are security updates.

    Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
    Environment:
      LANG=en_US.UTF-8
      USER=blyman
      LOGNAME=blyman
      HOME=/home/blyman
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
      MAIL=/var/mail/blyman
      SHELL=/bin/bash
      SSH_CLIENT=::1 43599 50505
      SSH_CONNECTION=::1 43599 ::1 50505
      SSH_TTY=/dev/pts/16
      TERM=xterm
      DISPLAY=localhost:10.0
    Running /usr/bin/xauth remove unix:10.0
    /usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393

वहां अंतिम तीन पंक्तियों को देखें। मैंने सौभाग्य से DISPLAY सेट किया था, और उन दो अच्छी दिखने वाली लाइनों से था / usr / bin / xauth।

वहां से यह मेरे / usr / bin / xauth को /usr/bin/xauth.old में ले जाने के लिए, ssh से डिस्कनेक्ट करने और sshd को रोकने के लिए, फिर sshd लॉन्च करें और ssh को वापस लोकलहोस्ट में लॉन्च करने के लिए बच्चे का खेल था।

जब / usr / bin / xauth चला गया था, तो मैंने अपने वातावरण में प्रदर्शित प्रदर्शन को नहीं देखा।


यहाँ कुछ भी शानदार नहीं चल रहा है। ज्यादातर मैं अपने स्थानीय मशीन पर इस पुन: पेश करने की कोशिश करने के लिए एक समझदार दृष्टिकोण चुनने में भाग्यशाली रहा।


1
वाह, आपके awer के लिए बहुत बहुत धन्यवाद। मैं सिवाय सब कुछ अच्छा कर रहा था export DISPLAY=:10। मैंने उस प्रदर्शन की संख्या का कभी अनुमान नहीं लगाया।
erm3nda

यह 10 का डिस्प्ले ऑफ़सेट है! : डी
४१ 41५४ २०:०२

33

निश्चित करें कि:

  • आपने xauthसर्वर पर स्थापित किया है (देखें: xauth info/ xauth list)।
  • सर्वर पर आपकी /etc/ssh/sshd_configफ़ाइल में ये पंक्तियाँ हैं:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • क्लाइंट की तरफ आपकी ~/.ssh/configफ़ाइल में ये लाइनें हैं:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • क्लाइंट की ओर, आपने X सर्वर स्थापित किया है (जैसे macOS: XQuartz; विंडोज: Xming)।


फिर SSH का उपयोग करके X11 अग्रेषण करने के लिए, आपको अपनी कमांड में जोड़ना -Xहोगाssh , जैसे

ssh -v -X user@host

तो सत्यापित करें कि आपका DISPLAYहै नहीं द्वारा खाली:

echo $DISPLAY

यदि ऐसा है, तो ssh ( -v) के लिए वर्बोज़ पैरामीटर होने , किसी भी चेतावनी के लिए जाँच करें, जैसे

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

यदि आपको ऊपर बताए अनुसार एक्स 11 मिल गया है, तो इसके बजाय ध्वज का प्रयास करें-Y (यदि आपको मेजबान पर भरोसा है):

ssh -v -Y user@host

देखें: क्या करता है "चेतावनी: अविश्वसनीय X11 अग्रेषण सेटअप विफल: xauth कुंजी डेटा उत्पन्न नहीं हुआ" जब ssh'ing साथ -X?


यदि आप चेतावनी दे रहे हैं: कोई xauth डेटा नहीं है , तो आप .Xauthorityउदाहरण के लिए एक नई फ़ाइल बनाने की कोशिश कर सकते हैं

xauth generate :0 . trusted
xauth list

देखें: एक नई .Xauthority फ़ाइल बनाएं / उसका पुनर्निर्माण करें


यदि आपको ऊपर से एक अलग चेतावनी मिली है, तो आगे के सुरागों का पालन करें।



1
निश्चित गाइड: क्लाइंट साइड पर कॉन्फ़िगरेशन ने
अंतर को

2
और X11UseLocalhost सर्वर पक्ष पर नहीं
user2928048

17

इस लाइन को अपने में जोड़ना है /etc/ssh/sshd_config:

X11UseLocalhost no

https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/


मेरे पास 2 Ubuntu सर्वर है। एक पर मुझे इसकी ज़रूरत थी हाँ, दूसरे पर यह नहीं होना था। मुझे यकीन है कि एक स्पष्टीकरण है, लेकिन यह दोनों की कोशिश करने के लिए लायक है।
अल्फोंक्स

1
यह फिक्स मेरे लिए काम किया !!
ऋग्वेद

3
कृपया स्पष्ट करें कि क्या आप इस सेटिंग को सर्वर या क्लाइंट पर रखना चाहते हैं
क्लीक

5

ssh -X दूरस्थ सर्वर पर GUI वातावरण प्राप्त करने के लिए विंडोज 10 पर Ubuntu बैश को चलने दें

  • प्रथम

सभी निम्नलिखित स्थापित करें। विंडो पर, इंस्टॉल करें Xming। उबंटू बैश पर, sudo apt installइंस्टॉल करने के लिए उपयोग करें ssh xauth xorg

sudo apt install ssh xauth xorg
  • दूसरा

फ़ोल्डर में ssh_configफ़ाइल में जाओ , मेरा है /etc/ssh

  • तीसरा

ssh_configव्यवस्थापक (USE sudo) के रूप में संपादित करें । अंदर ssh_config, हैश को दूर #लाइनों में ForwardAgent, ForwardX11, ForwardX11Trusted, और करने के लिए इसी तर्क सेट yes

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • आगे

में ssh_configफ़ाइल, सामने हैश हटाने #से पहले Port 22और Protocol 2, और भी xauth फ़ाइल स्थान राज्य के लिए फ़ाइल के अंत में एक नई लाइन जोड़ सकते हैं XauthLocaion /usr/bin/xauth, xauth फ़ाइल का अपना स्वयं का पथ बारे में याद है।

# /etc/ssh/ssh_config

#   IdentifyFile ...
    Port 22
    Protocol 2
#   Cipher 3des
#   ...
#   ...
    ...
    ...
    GSSAPIDelegateCredentials no
    XauthLocaion /usr/bin/xauth
  • पांचवां

अब चूंकि हम संपादन ssh_configफ़ाइल कर रहे हैं , इसलिए जब हम संपादक को छोड़ते हैं तो इसे सहेज लें। अब फोल्डर पर जाएं ~या $HOME, export DISPLAY=localhost:0अपनी .bashrcफाइल में अप्लाई करें और इसे सेव करें।

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • अंतिम

हम लगभग कर चुके हैं। अपने बैश शेल को पुनरारंभ करें, अपना Xmingप्रोग्राम खोलें और उपयोग करें ssh -X yourusername@yourhost। फिर GUI वातावरण का आनंद लें।

ssh -X yourusername@yourhost

समस्या विंडोज पर Ubuntu सबसिस्टम में भी है, और लिंक पर है

https://gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776


3

जोड़े X11UseLocalhost noको /etc/ssh/sshd_configऔर SSH सर्वर को पुनरारंभ करें।

यदि आपको कोई प्रदर्शन नहीं मिलता है, तो जांचें कि क्या xauth सही तरीके से स्थापित किया गया है और फिर इसे फिर से आज़माएं।

RHE / CEntos में यह समस्या नहीं है, यह एक उबंटू चीज़ है!


1

मेरे लिए समस्या / tmp फाइल सिस्टम के लिए नोड माउंट विकल्प में थी । X11 को वहां एक विशेष फ़ाइल बनाने की आवश्यकता है।

इसलिए जाँचें कि / tmp फाइल सिस्टम के लिए माउंट विकल्प क्या हैं यदि आप उसके लिए एक अलग विभाजन या डिस्क का उपयोग करते हैं।


1
मुझे लगता है कि आप मूल प्रश्न के अन्य उत्तरों को देखना चाहते हैं और एक पल के लिए सोच सकते हैं कि आपका खुद का उत्तर उन पर कैसे सुधार करता है।
सामी Laine

1

पिछले उत्कृष्ट उत्तरों को जोड़ने के लिए ( ~/.ssh/configयह देखने और जांचने के लिए कि क्या DISPLAYपर्यावरण चर क्लाइंट पर सेट है, स्थापित करना /etc/ssh/sshd_configऔर xauthसर्वर पर स्थापित करना), यह भी सुनिश्चित करें xtermकि क्लाइंट पर स्थापित किया गया है, जैसे।

sudo apt-get install xterm

1

xauth लॉक हो सकता है।

   -b      This  option  indicates  that  xauth  should  attempt to break any authority file locks before proceeding.  Use this
           option only to clean up stale locks.

का उपयोग करते हुए

xauth -b

जिस मशीन पर मैं sshताला तोड़ने की कोशिश कर रहा था xauthsshजारी करने के बाद सत्र से बाहर प्रवेश करना और xauth -bफिर वापस प्रवेश करना मुझे सफलतापूर्वक सफल करने की अनुमति देता है echo $DISPLAY। दोबारा बनाने से पहले निश्चित रूप से यह कोशिश करें.Xauthority


0

X11ForwardingSSH सर्वर पर सेट किया जाना चाहिए (आपके मामले में उबंटू बॉक्स) में sshd_config, और आपको -Xविकल्प ssh_configजोड़ने या ForwardX11डिफ़ॉल्ट को जोड़ने के लिए फ़ाइल को संपादित करके SSH क्लाइंट (आपके फेडोरा बॉक्स) के लिए X11 को अग्रेषित करने की अनुमति देनी चाहिए ।


1
आपको xauthदूरस्थ मशीन पर भी स्थापित होने की आवश्यकता है, अन्यथा x प्राधिकरण सामान काम नहीं करेगा।
फहीम मीठा

सेटिंग के बारे में क्या DISPLAY?
श्री शिखाडांस

1
ssh स्वचालित रूप से सेट हो जाएगा $DISPLAYयदि X11Forwardingसक्षम है और xauthक्लाइंट सिस्टम पर मौजूद है।
शादुर

1
@ बहादुर मेरे लिए नहीं। यह तब काम करता है जब मैं export DISPLAY=:10.0अन्यथा नहीं। अन्यथा, यह शिकायत करता है कि यह नहीं मिल सकता है :0। हो सकता है कि स्वचालित रूप से ऐसा करने के लिए कुछ और आवश्यक हो?
cfr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.