it-swarm-tr.com

Grafik uygulamalarını uzaktan çalıştırmak için X'i SSH üzerinden nasıl iletirim?

Ubuntu çalıştıran ve Fedora 14 makinemden SSH aldığım bir makinem var. Grafik programlarını uzaktan çalıştırabilmek için Ubuntu makinesinden X'i Fedora'ya iletmek istiyorum. Her iki makine de LAN'da.

-X Seçeneğinin SSH'de X11 iletmeyi etkinleştirdiğini biliyorum, ancak bazı adımları kaçırdığımı hissediyorum.

X'i bir Ubuntu makinesinden SSH üzerinden Fedora'ya iletmek için gerekli adımlar nelerdir?

390
Mr. Shickadance

X11 yönlendirmenin hem istemci tarafında hem de sunucu tarafında etkinleştirilmesi gerekir.

istemci tarafında , ssh için _-X_ (büyük X) seçeneği X11 yönlendirmesini etkinleştirir ve bunu yapabilirsiniz _ForwardX11 yes_ içindeki _~/.ssh/config_ ile varsayılan (tüm bağlantılar veya belirli bir bağlantı için).

sunucu tarafında , _X11Forwarding yes_ _/etc/ssh/sshd_config_ içinde belirtilmelidir. Varsayılanın yönlendirme olmadığını (bazı dağıtımların varsayılan _/etc/ssh/sshd_config_ ile açtığını) ve kullanıcının bu ayarı geçersiz kılamayacağını unutmayın.

Sunucu tarafına xauth programı yüklenmelidir. Orada herhangi bir X11 programı varsa, büyük olasılıkla xauth olacaktır. Olası olmayan bir durumda xauth standart olmayan bir yere kurulmuşsa, _~/.ssh/rc_ (sunucuda!) Üzerinden çağrılabilir.

Sunucuda herhangi bir ortam değişkeni ayarlamanıza gerek olmadığını unutmayın. DISPLAY ve XAUTHORITY otomatik olarak uygun değerlerine ayarlanacaktır. Ssh komutunu çalıştırırsanız ve DISPLAY ayarlanmazsa, ssh, X11 bağlantısını iletmiyor demektir.

Ssh'ın X11 ilettiğini doğrulamak için _Requesting X11 forwarding_ çıkışında _ssh -v -X_ içeren bir satır olup olmadığını kontrol edin. sunucunun her iki şekilde de yanıt vermeyeceğini , potansiyel saldırganların ayrıntılarını gizlemenin bir güvenlik önlemi olduğunu unutmayın.

X11 yönlendirmesinin ssh üzerinde çalışmasını sağlamak için 3 şeye ihtiyacınız vardır.

  1. Müşteriniz X11'i iletecek şekilde ayarlanmalıdır.
  2. Sunucunuz X11 yönlendirmesine izin verecek şekilde ayarlanmalıdır.
  3. Sunucunuz X11 kimlik doğrulamasını ayarlayabilmelidir.

Hem # 1 hem de # 2 yerine sahipseniz ancak # 3 eksikse, boş bir DISPLAY ortam değişkeni elde edersiniz.

Çorbadan fındıklara, X11 iletmeyi nasıl çalıştıracağınız aşağıda açıklanmıştır.

  1. Sunucunuzda/etc/ssh/sshd_config dosyasının şunları içerdiğinden emin olun:

    X11Forwarding yes
    X11DisplayOffset 10
    

    Bu değişiklikleri almak için SIGHUP sshd'ye ihtiyacınız olabilir.

    cat /var/run/sshd.pid | xargs kill -1
    
  2. Sunucunuzda, xauth'un kurulu olduğundan emin olun.

    [email protected]:~$ which xauth
    /usr/bin/xauth
    

    Yüklü xauth yoksa "boş DISPLAY ortam değişkeni" sorunuyla karşılaşırsınız.

  3. İstemcinizde sunucunuza bağlanın. Ssh'ye X11 yönlendirmesine izin vermesini söylediğinizden emin olun. tercih ederim

    [email protected]:~$ ssh -X [email protected]
    

ama hoşuna gidebilir

    [email protected]:~$ ssh -o ForwardX11=yes [email protected]

ya da ~/.ssh/config dosyasında ayarlayabilirsiniz.


Yönetmediğim yeni bir sunucuya ssh'ing yaparken bu boş DISPLAY ortam değişkenine bugün başlamıştım. Eksik xauth bölümünü takip etmek biraz eğlenceliydi. İşte yaptığım ve sizin de yapabileceğiniz şey.

Yönetici olduğum yerel iş istasyonumda,/etc/ssh/sshd_config dosyasının X11'i iletecek şekilde ayarlandığını doğruladım. Shost -X'i localhost'a geri getirdiğimde, DISPLAY'ımı doğru şekilde ayarlıyorum.

DISPLAY'ı ayarlanmaya zorlamak çok zor değildi. Sadece doğru ayarlamak için sshd ve ssh ne yaptığını izlemek gerekiyordu. İşte yol boyunca yaptığım her şeyin tam çıktısı.

    [email protected]:~$ mkdir ~/dummy-sshd
    [email protected]:~$ 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 dosyalarımı kopyalamaya zorlamak için Sudo kullanmak yerine, kendim için kukla olanlar oluşturmak için ssh-keygen kullandım.

    [email protected]:~$ 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.

-T dsa ile durulayın ve tekrarlayın:

    [email protected]:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_Host_dsa_key
    # I bet you can visually copy-paste the above output down here

~/Dummy-sshd/sshd_config dosyasını doğru yeni ssh_Host anahtar dosyalarını işaret edecek şekilde düzenleyin.

    # before
    [email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config 
    HostKey /etc/ssh/ssh_Host_rsa_key
    HostKey /etc/ssh/ssh_Host_dsa_key

    # after
    [email protected]:~$ 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

Ayrılmayan modda yeni bir bağlantı noktasında sshd'yi başlatın:

    [email protected]:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    sshd re-exec requires execution with an absolute path

Hata! Bu yolu daha iyi düzeltin:

    [email protected]:~$ /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 numaralı bağlantı noktasında localhost'a yeni bir terminal ve ssh girin:

    [email protected]:~$ 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

Oradaki son üç satıra bak. Tesadüfen EKRAN ayarlanmış ve/usr/bin/xauth bu güzel görünümlü çizgiler vardı.

Oradan/usr/bin/xauth'umu /usr/bin/xauth.old adresine bir kenara taşımak, ssh bağlantısını kesip sshd'yi durdurmak, sonra sshd ve ssh'yi localhost'a geri getirmek çocuk oyuncağıydı.

/ Usr/bin/xauth gittiğinde DISPLAY'in çevreme yansıdığını görmedim.


Burada parlak bir şey yok. Çoğunlukla bunu yerel makinemde yeniden üretmeyi denemek için aklı başında bir yaklaşım seçerken şanslıydım.

98
Belden

Emin olun:

  • Sunucuya xauth yüklediniz (bkz: xauth info/xauth list).
  • Sunucuda /etc/ssh/sshd_config dosyasında şu satırlar var:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • İstemci tarafında ~/.ssh/config dosyasında şu satırlar var:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • İstemci tarafında, X sunucunuz yüklüdür (örn. MacOS: XQuartz; Windows: Xming).


Daha sonra SSH kullanarak X11 iletimi yapmak için -Xssh komutunuza, ör.

ssh -v -X [email protected]

o zaman DISPLAY öğenizin boş olmadığını doğrulayın:

echo $DISPLAY

Öyleyse, ssh için ayrıntılı parametreye sahip olmak (-v), uyarıları kontrol edin, ör.

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

Yukarıda gösterildiği gibi güvenilmeyen X11 olması durumunda, -Y flag yerine (Host'a güveniyorsanız):

ssh -v -Y [email protected]

Bakınız: -X ile ssh'ing yaparken “Uyarı: güvenilmeyen X11 yönlendirme kurulumu başarısız oldu: xauth anahtar verileri üretilmedi” ne anlama geliyor?


Uyarı: xauth verisi yok olması durumunda, yeni bir .Xauthority dosya, ör.

xauth generate :0 . trusted
xauth list

Bakınız: Yeni bir .Xauthority dosyası oluşturma/yeniden oluşturma


Yukarıdakilerden farklı bir uyarınız varsa, diğer ipuçlarını izleyin.


43
kenorb

Düzeltme, bu satırı /etc/ssh/sshd_config:

X11UseLocalhost no

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

21
Ace

Uzak bir sunucuda GUI ortamı elde etmek için Windows 10'da Ubuntu bash'ı çalıştırmak ssh -X

  • İlk

Aşağıdakilerin tümünü yükleyin. Pencereye Xming yükleyin. Terminaldeki Ubuntu'da Sudo apt install Yazılımını kurmak için ssh xauth xorg Kullanın.

Sudo apt install ssh xauth xorg
  • İkinci

ssh_config Dosyasını içeren klasöre gidin, benimki /etc/ssh.

  • Üçüncü

ssh_config Dosyasını yönetici olarak düzenleyin (USE Sudo). ssh_config İçinde ForwardAgent, #, ForwardX11 Satırlarındaki ForwardX11Trusted Karmasını kaldırın ve ilgili bağımsız değişkenleri yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • Ileri

ssh_config Dosyasında, # Ve Port 22 Öncesi ön karmayı Protocol 2 Kaldırın ve ayrıca xauth değerini belirtmek için dosyanın sonuna yeni bir satır ekleyin dosya konumu, XauthLocation /usr/bin/xauth, kendi xauth dosyası yolunuzu yazmayı unutmayın.

# /etc/ssh/ssh_config

#   IdentifyFile ...
    Port 22
    Protocol 2
#   Cipher 3des
#   ...
#   ...
    ...
    ...
    GSSAPIDelegateCredentials no
    XauthLocation /usr/bin/xauth
  • Beşinci

Şimdi ssh_config Dosyasını düzenlemeyi tamamladığımız için, düzenleyiciden ayrıldığımızda kaydedin. Şimdi ~ Veya $HOME Klasörüne gidin, export DISPLAY=localhost:0 Dosyanıza .bashrc Dosyasını ekleyin ve kaydedin.

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • Son

Neredeyse bitti. Bash Shell'inizi yeniden başlatın, Xming programınızı açın ve ssh -X [email protected] Kullanın. Ardından GUI ortamının keyfini çıkarın.

ssh -X [email protected]

Sorun ayrıca Windows'taki Ubuntu alt sisteminde ve bağlantı şurada:

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

5
DestinyOne

Ekle X11UseLocalhost no ila /etc/ssh/sshd_config ve SSH sunucusunu yeniden başlatın.

EKRAN almazsanız, xauth'un doğru bir şekilde kurulduğunu kontrol edin ve ardından tekrar deneyin.

RHE/CEntos'un bu sorunu yok, bu bir Ubuntu şey!

4
stephen cooke

Benim için sorun nodev/tmp dosya sistemi için mount seçeneğindeydi. X11'in orada oluşturulması için özel bir dosyaya ihtiyacı var.

Bunun için ayrı bir bölüm veya disk kullanıyorsanız/tmp dosya sistemi için bağlama seçeneklerinin neler olduğunu kontrol edin.

1
yakovpol

Önceki mükemmel yanıtlara eklemek için (~/.ssh/config ve DISPLAY ortam değişkeninin istemcide ayarlanıp ayarlanmadığını kontrol ederek /etc/ssh/sshd_config ve sunucuya xauth yüklerseniz), ayrıca istemciye xterm yüklendiğinden emin olun, ör.

Sudo apt-get install xterm
1
Aliz Rao

xauth kilitlenebilir.

   -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.

Kullanma

xauth -b

ssh içine girmeye çalıştığım makinede xauth üzerindeki kilidi kırdı. xauth -b Verdikten sonra ssh oturumundan çıkış yapmak, ardından tekrar giriş yapmak sonunda echo $DISPLAY Başarılı olmamı sağladı. Kesinlikle .Xauthority Oluşturmadan önce bunu deneyin

1

X11Forwarding, sshd_config İçindeki SSH sunucusunda (sizin durumunuzda Ubuntu kutusu) ayarlanmış olmalı ve X11'in SSH istemcisi (Fedora kutunuz) için iletilmesine izin vermelisiniz. -X Seçeneğini seçin veya ssh_config Varsayılanını eklemek için ForwardX11 Dosyasını düzenleyin.

1
Caleb