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


342

Fedora 14 makinemden SSH'yi çalıştıran Ubuntu çalıştıran bir makinem var. X'i Ubuntu makinesinden Fedora'ya yönlendirmek istiyorum, böylece grafik programları uzaktan çalıştırabilirim. Her iki makine de LAN üzerinde.

Bu -Xseçeneğin SSH’de X11’in yönlendirilmesini sağladığını biliyorum , ancak bazı adımların eksik olduğunu hissediyorum.

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


6
Bunun oldukça yaygın olduğunu biliyorum, ancak sorunlarım var. Bu sorunun kesin bir cevabı birçokları için faydalı olacaktır. Çevresindeki pek çok örnek önemli ayrıntılar içermiyor gibi görünüyor.
Bay Shickadance

Yanıtlar:


411

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

On istemci tarafında , -Xhiç (sermaye X) seçeneğini sshX11 iletilmesini sağlar ve bu (belirli bir conection tüm bağlantılar için veya için) varsayılan yapabilir ForwardX11 yesiçinde ~/.ssh/config.

Açık sunucu tarafında , X11Forwarding yesbelirtilen gerekir /etc/ssh/sshd_config. Varsayılanın iletme olmadığını (bazı dağıtımlar varsayılan /etc/ssh/sshd_configayarlarında açar ) ve kullanıcının bu ayarı geçersiz kılamayacağını unutmayın.

xauthProgram sunucu tarafında yüklü olmalıdır. Orada herhangi bir X11 programı varsa, orada olması çok muhtemeldir xauth. Beklenmedik bir durumda xauthstandart olmayan bir yere kurulmuşsa, bunlar ~/.ssh/rc(sunucuda!) Üzerinden çağrılabilir .

Sunucuda herhangi bir ortam değişkeni ayarlamanıza gerek olmadığını unutmayın. DISPLAYve XAUTHORITYotomatik olarak uygun değerlerine ayarlanacaktır. Eğer ssh kullanıyorsanız ve DISPLAYayarlanmadıysa, ssh X11 bağlantısını iletmiyor demektir.

Ssh'nin X11'i ilettiğini onaylamak Requesting X11 forwardingiçin ssh -v -Xçıktıda içeren bir çizgi olup olmadığını kontrol edin . Not Sunucu cevap vermez her iki şekilde, potansiyel saldırganların ayrıntıları gizleme bir güvenlik önlemi.


31
@ user: Hayır, hiç ihtiyacınız yok xhost +. xhostağa bağlı bir makineye sahip olduğunuzda güvenilir olduğunuz anlamına gelen daha yumuşak bir dönemden geliyor. xhost +IP'nizi taklit edebilecek herkesin X sunucu oturumunuzu kontrol altına alabileceği anlamına gelir. ssh -Xgerekli tüm yetkileri ayarlayacaktır. Sunucu yapılandırmasında X11 iletme devre dışı bırakılırsa, yöneticinizle konuşun; bu işe yaramazsa, sunucu yapılandırması izin vermiyorsa , bkz. X11'i SSH Üzerine İletme .
Gilles

6
Xauth'dan bahsettiğin için teşekkürler! Bir barebones sunucusunda bunun olmaması beni rahatsız ediyordu.
vasi

5
Aynı yerde ~/.ssh/configve /etc/ssh/sshd_configarasında ayrım yapmak için +1 . Dosyaların farklı olup olmadığını veya isimlendirme konusunda sadece bir değişiklik olduğunu söyleyemedim.
puk

1
@KhurshidAlam Sunucunun bir GUI ortamı çalıştırıp çalıştırmadığı da önemli değil. .XauthorityDosyadaki izinleri kontrol et . Red Hat veya SELinux ile başka bir sistem kullanıyorsanız, SELinux içeriğini kontrol edin, bkz. Unix.stackexchange.com/questions/36540/…
Gilles

8
Çalışmadan sonra çalışıp çalışmadığını görmek için nihai test olarak bir grafik terminal elde etmek için ssh -Xçalıştırdıktan sonra xterm &.
Alexander Taylor

87

X11'in ssh üzerinden çalışmasını sağlamak için 3 şeye ihtiyacınız olacak.

  1. Müşteriniz X11'i ilerletmek üzere ayarlanmış olmalıdır.
  2. Sunucunuz X11 yönlendirmesine izin verecek şekilde ayarlanmış olmalıdır.
  3. Sunucunuz X11 kimlik doğrulaması ayarlayabilmelidir.

Hem # 1 hem de # 2 varsa ve # 3 eksikse, o zaman boş bir DISPLAY ortam değişkeni ile sonuçlanırsınız.

Çorba-kuruyemiş, işte X11'in çalışmasını sağlayın.

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

    X11Forwarding yes
    X11DisplayOffset 10
    

    SIGHUP sshd komutunu girmeniz gerekebilir, bu yüzden bu değişiklikleri toplar.

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

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

    Eğer xauth kurulmamışsa, "boş DISPLAY ortam değişkeni" sorunuyla karşılaşırsınız.

  3. İstemcinizde sunucunuza bağlanın. Ssh'ye X11 yönlendirmesine izin verdiğinden emin olun. tercih ederim

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

ama beğenebilirsin

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

veya bunu ~ / .ssh / config dosyasında ayarlayabilirsiniz.


Yönetmediğim yeni bir sunucuya girerken, bugün daha önce bu boş DISPLAY ortam değişkeniyle karşılaşıyordum. Eksik Xauth bölümünü izlemek biraz eğlenceliydi. İşte ne yaptım ve siz de ne yapabilirsiniz.

Yerel iş istasyonumda yönetici olduğum yerde / etc / ssh / sshd_config dosyasının X11 yönlendirmek üzere ayarlandığını doğruladım. -X'i localhost'a geri döndürdüğümde, DISPLAY'ini doğru ayarlıyorum.

DISPLAY'i üzülmeye zorlamak çok zor değildi. Sadece sshd ve ssh'nin doğru bir şekilde ayarlanması için neler yaptığını izlemeye ihtiyacım vardı. İşte yol boyunca yaptığım her şeyin tam çıktısı.

    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 dosyalarımı yerine kopyalamak için sudo kullanmak yerine, kendim için sahte dosyalar oluşturmak için ssh-keygen kullandım.

    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.

Durulayın ve -t dsa ile tekrarlayın:

    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

Doğru yeni ssh_host anahtar dosyalarına işaret etmek için ~ / dummy-sshd / sshd_config dosyasını düzenleyin.

    # 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

Ayrılmayan modda sshd'yi yeni bir bağlantı noktasına ateşleyin:

    blyman@skretting:~$ 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:

    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.

Yeni bir terminal açın ve 50505 numaralı bağlantı noktasındaki localhost'a girin:

    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

Buradaki son üç satıra bakın. Şüphesiz DISPLAY ayarını yaptım ve / usr / bin / xauth'dan bu iki güzel görünümlü çizgiyi gördüm.

Oradan / usr / bin / xauth'umu /usr/bin/xauth.old'a ayırmak, ssh ile bağlantıyı kesmek ve sshd'yi durdurmak, daha sonra sshd ile ssh'yi tekrar başlatmak için localhost'a döndüm.

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


Burada olacak mükemmel bir şey yok. Çoğunlukla, yerel makinemde bunu yeniden üretmeyi denemek için mantıklı bir yaklaşım seçme konusunda şanslıydım.


1
Vay canına, anwer için çok teşekkür ederim. Ben hariç her şeyi iyi yapıyordum export DISPLAY=:10. Bu sayıyı asla tahmin etmedim.
erm3nda

10'luk bir ekran ofseti ! : D
41754,

33

Emin olun:

  • Sen ettik xauthsunucuda yüklü (: bakınız xauth info/ xauth list).
  • Sunucuda /etc/ssh/sshd_configdosyanızda şu satırlar var:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • İstemci tarafında, ~/.ssh/configdosyanızın şu satırları var:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • İstemci tarafında, X sunucunuz kurulu (örneğin macOS: XQuartz; Windows: Xming).


O zaman SSH kullanarak X11 yönlendirme yapmak için komutunuza eklemeniz-Xssh gerekir , örneğin

ssh -v -X user@host

Sonra senin doğrulamak DISPLAYolduğu değil tarafından boş:

echo $DISPLAY

Eğer öyleyse, ssh ( -v) için ayrıntılı parametre olması durumunda , örneğin herhangi bir uyarı olup olmadığını kontrol edin.

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

Eğer var güvenilmeyen X11 sonra, yukarıda gösterildiği gibi deneyin -Ybayrağı yerine (eğer ev sahibi güveniyorsanız):

ssh -v -Y user@host

Bakınız: “Uyarı: güvensiz X11 iletme kurulumu başarısız oldu: xauth anahtar verisi üretilmedi” -X ile ssh' yaparken ne anlama geliyor?


Uyarı durumunda : xauth verisi yoksa, yeni bir .Xauthoritydosya oluşturmayı deneyebilirsiniz , örn.

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ı takip edin.



1
Tanımlayıcı Rehber: İstemci tarafındaki konfigürasyon
farklılıkları

2
ve sunucu tarafında X11UseLocalhost no
user2928048


5

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

  • İlk

Aşağıdakileri yükleyin. Pencerede yükleyin Xming. Ubuntu bash'da sudo apt installkurmak için kullanın ssh xauth xorg.

sudo apt install ssh xauth xorg
  • İkinci

Klasöre git, ssh_configdosyayı içerir , benim /etc/ssh.

  • Üçüncü

Düzenleme ssh_configyöneticisi (KULLANIM olarak sudo). İçinde ssh_config, karma kaldırma #hatları ForwardAgent, ForwardX11, ForwardX11Trustedve karşılık gelen bağımsız değişkenler ayarlanır yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • ileri

Gelen ssh_configdosyanın ön karma kaldırmak #önce Port 22ve Protocol 2hem de xauth dosya konumunu belirtmek dosyanın sonuna yeni bir satır eklemek, XauthLocaion /usr/bin/xauth, xauth dosyasının kendi yolunu yazmak unutmayın.

# /etc/ssh/ssh_config

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

Artık ssh_configdosyayı düzenlemeyi bitirdiğimizden , editörden ayrıldığımızda kaydedin. Şimdi klasöre git ~ya $HOME, ekler export DISPLAY=localhost:0sizin için .bashrcdosya ve kaydedin.

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

Neredeyse bitti. Bash kabuğunuzu yeniden başlatın, Xmingprogramınızı açın ve kullanın ssh -X yourusername@yourhost. Ardından GUI ortamının tadını çıkarın.

ssh -X yourusername@yourhost

Sorun aynı zamanda Windows'taki Ubuntu alt sisteminde ve bağlantı ise

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


3

Ekle X11UseLocalhost noiçin /etc/ssh/sshd_configve SSH sunucusunu yeniden başlatın.

EKRAN alamazsanız, xauth'un doğru kurulup kurulmadığını kontrol edin ve tekrar deneyin.

RHE / CEntos'un bu sorunu yok, bu Ubuntu olayı!


1

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

Öyleyse, eğer bunun için ayrı bir bölüm veya disk kullanıyorsanız / tmp dosya sistemi için mount seçeneklerinin neler olduğunu kontrol edin.


1
Bence asıl sorunun diğer cevaplarını görmek isteyebilir ve kendi cevabınızın bunlarda nasıl geliştiğini düşünmek için bir dakikanızı ayırabilirsiniz.
Sami Laine

1

(Kurma önceki mükemmel cevaplar eklemek için ~/.ssh/configve eğer görmek için kontrol DISPLAYortam değişkeni istemci üzerinde ayarlanır, ayarlama /etc/ssh/sshd_configve yükleme xauthsunucuda), ayrıca emin olun xterm, örneğin istemci üzerinde yüklü

sudo apt-get install xterm

1

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

Makineye girmeye çalıştığım sshkilit açıldı xauth. Çıkış sshyaptıktan sonra oturumun kapatılması ve xauth -bdaha sonra tekrar giriş yapılması başarılı bir şekilde yapmamı sağladı echo $DISPLAY. Yeniden oluşturmadan önce bunu kesinlikle deneyin.Xauthority


0

X11ForwardingSSH sunucusunda (sizin durumunuzda Ubuntu kutusu) içinde ayarlanmış sshd_configolmalı ve -Xseçeneği geçerek veya varsayılanı ssh_configeklemek için dosyayı düzenleyerek X11'in SSH istemcisi (Fedora kutunuz) için iletilmesine izin vermelisiniz ForwardX11.


1
Aynı zamanda xauthuzaktaki makineye de kurmanız gerekiyor , aksi takdirde x otorite işi işe yaramaz.
Faheem Mitha

Peki ya ayar DISPLAY?
Bay Shickadance

1
İstemci sisteminde etkinse ve $DISPLAYvarsa X11Forwarding, ssh otomatik olarak ayarlanacaktır xauth.
Shadur

1
@Shadur Benim için değil. Ben varken çalışıyor export DISPLAY=:10.0ama başka türlü değil. Aksi takdirde, bulamamasından şikayet eder :0. Belki bunun otomatik olarak gerçekleşmesi için başka bir şeye ihtiyaç vardır?
cfr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.