it-swarm-id.com

Bagaimana cara meneruskan X melalui SSH untuk menjalankan aplikasi grafis dari jarak jauh?

Saya memiliki mesin yang menjalankan Ubuntu yang saya SSH dari dari mesin Fedora 14 saya. Saya ingin meneruskan X dari mesin Ubuntu kembali ke Fedora sehingga saya dapat menjalankan program grafis dari jarak jauh. Kedua mesin berada di LAN.

Saya tahu bahwa -X Opsi memungkinkan penerusan X11 dalam SSH, tetapi saya merasa seperti saya kehilangan beberapa langkah.

Apa langkah-langkah yang diperlukan untuk meneruskan X dari mesin Ubuntu ke Fedora melalui SSH?

390
Mr. Shickadance

Penerusan X11 perlu diaktifkan pada sisi klien dan sisi server.

Di sisi klien , -X (modal X) pilihan ke ssh memungkinkan penerusan X11, dan Anda dapat menjadikan ini default (untuk semua koneksi atau untuk koneksi tertentu) dengan ForwardX11 yes di ~/.ssh/config .

Di sisi server , X11Forwarding yes harus ditentukan dalam /etc/ssh/sshd_config . Perhatikan bahwa standarnya adalah penerusan (beberapa distribusi menyalakannya dalam standar _ /etc/ssh/sshd_config), dan bahwa pengguna tidak dapat mengesampingkan pengaturan ini.

Program xauth harus diinstal di sisi server. Jika ada program X11 di sana, sangat mungkin bahwa xauth akan ada di sana. Dalam kasus yang tidak mungkin xauth dipasang di lokasi yang tidak standar, dapat dipanggil melalui ~/.ssh/rc (di server!).

Perhatikan bahwa Anda tidak perlu mengatur variabel lingkungan apa pun di server. DISPLAY dan XAUTHORITY akan secara otomatis diatur ke nilai yang tepat. Jika Anda menjalankan ssh dan DISPLAY tidak disetel, itu berarti ssh tidak meneruskan koneksi X11.

Untuk mengkonfirmasi bahwa ssh meneruskan X11, periksa baris yang berisi Requesting X11 forwarding dalam ssh -v -X keluaran. Perhatikan bahwa server tidak akan membalas dengan cara apa pun, tindakan pencegahan keamanan untuk menyembunyikan detail dari penyerang potensial.

Untuk membuat penerusan X11 bekerja melebihi ssh, Anda perlu 3 hal di tempat.

  1. Klien Anda harus diatur untuk meneruskan X11.
  2. Server Anda harus diatur untuk memungkinkan penerusan X11.
  3. Server Anda harus dapat mengatur otentikasi X11.

Jika Anda memiliki # 1 dan # 2 di tempat tetapi tidak ada # 3, maka Anda akan berakhir dengan variabel lingkungan DISPLAY yang kosong.

Sup-ke-kacang, inilah cara agar penerusan X11 berfungsi.

  1. Di server Anda, pastikan/etc/ssh/sshd_config berisi:

    X11Forwarding yes
    X11DisplayOffset 10
    

    Anda mungkin perlu SIGHUP sshd sehingga mengambil perubahan ini.

    cat /var/run/sshd.pid | xargs kill -1
    
  2. Di server Anda, pastikan Anda telah menginstal xauth.

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

    Jika Anda belum menginstal xauth, Anda akan mengalami masalah "kosong DISPLAY environment variable".

  3. Di klien Anda, sambungkan ke server Anda. Pastikan untuk memberitahu ssh untuk mengizinkan penerusan X11. saya lebih memilih

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

tapi kamu mungkin suka

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

atau Anda dapat mengatur ini di ~/.ssh/config Anda.


Saya berlari ke variabel lingkungan DISPLAY kosong ini sebelumnya hari ini ketika ssh'ing ke server baru yang saya tidak kelola. Melacak bagian xauth yang hilang cukup menyenangkan. Inilah yang saya lakukan, dan apa yang dapat Anda lakukan juga.

Di workstation lokal saya, di mana saya seorang administrator, saya memverifikasi bahwa/etc/ssh/sshd_config telah diatur untuk meneruskan X11. Ketika saya ssh -X kembali ke localhost, saya mendapatkan DISPLAY saya diatur dengan benar.

Memaksa DISPLAY untuk tidak disetel tidak terlalu sulit. Saya hanya perlu menonton apa yang sshd dan ssh lakukan untuk mengaturnya dengan benar. Inilah hasil lengkap dari semua yang saya lakukan di sepanjang jalan.

    [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

Alih-alih menggunakan Sudo untuk memaksa menyalin file ssh_Host_ {dsa, rsa} _key saya ke tempatnya, saya menggunakan ssh-keygen untuk membuat yang dummy untuk saya sendiri.

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

Bilas dan ulangi dengan -t dsa:

    [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

Edit ~/dummy-sshd/sshd_config untuk menunjuk ke file kunci ssh_Host baru yang benar.

    # 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

Jalankan sshd pada port baru dalam mode non-detach:

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

Aduh, lebih baik perbaiki jalur itu:

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

Pop terminal baru dan ssh in ke localhost di port 50505:

    [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

Lihatlah tiga baris terakhir di sana. Saya kebetulan memiliki DISPLAY yang ditetapkan, dan memiliki dua baris yang tampak bagus dari/usr/bin/xauth.

Dari sana adalah permainan anak-anak untuk memindahkan/usr/bin/xauth ke /usr/bin/xauth.old saya, lepaskan sambungan dari ssh dan hentikan sshd, kemudian jalankan sshd dan ssh kembali ke localhost.

Ketika/usr/bin/xauth hilang, saya tidak melihat DISPLAY tercermin di lingkungan saya.


Tidak ada yang brilian terjadi di sini. Sebagian besar saya beruntung dalam memilih pendekatan yang waras untuk mencoba mereproduksi ini di mesin lokal saya.

98
Belden

Pastikan bahwa:

  • Anda telah xauth diinstal di server (lihat: xauth info/xauth list).
  • Di server file /etc/ssh/sshd_config Anda memiliki baris berikut:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • Di sisi klien, file ~/.ssh/config Anda memiliki baris berikut:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • Di sisi klien, Anda telah menginstal X server (mis. MacOS: XQuartz; Windows: Xming).


Kemudian untuk melakukan penerusan X11 menggunakan SSH, Anda perlu menambahkan -X Ke perintah ssh Anda, mis.

ssh -v -X [email protected]

kemudian verifikasi bahwa DISPLAY Anda tidak kosong oleh:

echo $DISPLAY

Jika ya, maka memiliki parameter verbose untuk ssh (-v), Periksa apakah ada peringatan, mis.

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

Jika Anda punya X11 tidak terpercaya seperti yang ditunjukkan di atas, maka coba bendera -Y sebagai gantinya ( jika Anda mempercayai Host):

ssh -v -Y [email protected]

Lihat: Apa artinya “Peringatan: penyiapan penerusan X11 yang tidak terpercaya gagal: artinya data kunci xauth tidak dihasilkan” artinya ketika ssh'ing dengan -X?


Jika Anda peringatan: Tidak ada data xauth, Anda dapat mencoba membuat file .Xauthority Baru, mis.

xauth generate :0 . trusted
xauth list

Lihat: Membuat/membangun kembali file .Xauthority bar


Jika Anda mendapat peringatan berbeda dari di atas, ikuti petunjuk selanjutnya.


43
kenorb

Cara mengatasinya adalah menambahkan baris ini ke /etc/ssh/sshd_config Anda:

X11UseLocalhost no

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

21
Ace

Membiarkan Ubuntu bash di Windows 10 menjalankan ssh -X Untuk mendapatkan lingkungan GUI di server jauh

  • Pertama

Instal semua yang berikut ini. Di Jendela, instal Xming. Di Ubuntu di terminal, gunakan Sudo apt install Untuk menginstal ssh xauth xorg.

Sudo apt install ssh xauth xorg
  • Kedua

Pergi ke folder yang berisi file ssh_config, Milik saya adalah /etc/ssh.

  • Ketiga

Edit ssh_config Sebagai administrator (USE Sudo). Di dalam ssh_config, Hapus hash # Di baris ForwardAgent, ForwardX11, ForwardX11Trusted, Dan atur argumen yang sesuai ke yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • Keempat

Dalam file ssh_config, Hapus hash depan # Sebelum Port 22 Dan Protocol 2, Dan juga tambahkan baris baru di akhir file untuk menyatakan xauth lokasi file, XauthLocation /usr/bin/xauth, ingatlah untuk menulis path file xauth Anda sendiri.

# /etc/ssh/ssh_config

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

Sekarang karena kita selesai mengedit file ssh_config, Simpan ketika kita meninggalkan editor. Sekarang pergi ke folder ~ Atau $HOME, Tambahkan export DISPLAY=localhost:0 Ke file .bashrc Anda dan simpan.

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

Kami hampir selesai. Mulai ulang bash Shell Anda, buka program Xming Anda dan gunakan ssh -X [email protected]. Kemudian nikmati lingkungan GUI.

ssh -X [email protected]

Masalahnya juga di subsistem Ubuntu di Windows, dan tautannya ada di

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

5
DestinyOne

Menambahkan X11UseLocalhost no hingga /etc/ssh/sshd_config dan mulai ulang server SSH.

Jika Anda tidak mendapatkan DISPLAY, periksa apakah xauth diinstal dengan benar dan kemudian coba lagi.

RHE/CEntos tidak memiliki masalah ini, ini adalah masalah Ubuntu!

4
stephen cooke

Bagi saya masalahnya ada di nodev opsi mount untuk/tmp filesystem. X11 membutuhkan file khusus untuk dibuat di sana.

Jadi periksa apa saja opsi mount untuk sistem file/tmp jika Anda menggunakan partisi atau disk terpisah untuk itu.

1
yakovpol

Untuk menambah jawaban luar biasa sebelumnya (pengaturan ~/.ssh/config dan memeriksa untuk melihat apakah variabel lingkungan DISPLAY diatur pada klien, pengaturan /etc/ssh/sshd_config dan menginstal xauth di server), juga memastikan xterm diinstal pada klien, mis.

Sudo apt-get install xterm
1
Aliz Rao

xauth dapat dikunci.

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

Menggunakan

xauth -b

Pada mesin yang saya coba ssh menjadi kunci pecah pada xauth. Keluar dari sesi ssh setelah mengeluarkan xauth -b lalu masuk kembali akhirnya memungkinkan saya untuk berhasil echo $DISPLAY. Cobalah ini sebelum membuat ulang .Xauthority

1

X11Forwarding harus diatur pada server SSH (dalam kasus Anda kotak Ubuntu) di sshd_config, dan Anda harus mengizinkan X11 diteruskan untuk klien SSH (kotak Fedora Anda) dengan melewati -X opsi atau mengedit ssh_config file untuk menambahkan ForwardX11 default.

1
Caleb