Setelah `ssh` tanpa` -X` ke mesin, apakah mungkin untuk mengubah `$ DISPLAY` untuk membuatnya berfungsi seperti` ssh -X`?

22

Setelah sshtanpa -Xke mesin, apakah mungkin untuk mengubah beberapa pengaturan (misalnya $DISPLAY) untuk membuatnya berfungsi ssh -X? Jika tidak, apa alasannya? Terima kasih.

Tim
sumber
Saya sarankan untuk membuat judul pertanyaan lebih singkat dengan meninggalkan change $DISPLAY to. Judul pertanyaan saat ini tidak dapat ditampilkan secara penuh dalam hasil pencarian, dan mengubah $ DISPLAY benar-benar bagian dari jawaban, bukan bagian dari pertanyaan.
Dmitry Grigoryev

Jawaban:

33

Anda dapat membuat koneksi kedua dengan penerusan X11 diaktifkan, dan kemudian Anda juga dapat menggunakan DISPLAYvariabel lingkungan dari koneksi kedua di yang pertama.

Di jendela 1:

$ ssh user@host
user@host$ ...

Di jendela ke-2:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

Kembali ke jendela 1:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

Sayangnya, sshtidak melakukan apa pun yang berisi penerusan X11 (atau lainnya) pada proses / sesi yang dimulai atau kepada pengguna yang dijalankannya seperti pada mesin jarak jauh (mis. Dengan menggunakan soket Unix dengan / keluar memeriksa kredensial, atau dengan menggunakan ruang nama), dan penerusan itu adalah soket pendengar tcp sederhana yang dapat disambungkan oleh siapa pun di mesin jarak jauh; semua keamanan penerusan X11 bergantung pada otentikasi X11.

X11 Penerusan Dengan Tangan

Halaman sshd_config(5)manual menyebutkan bahwa:

menonaktifkan penerusan X11 tidak mencegah pengguna meneruskan lalu lintas X11, karena pengguna selalu dapat menginstal penerusan mereka sendiri.

Inilah cara Anda dapat melakukannya dengan tangan.

Pertama-tama, pastikan untuk menonaktifkan kontrol akses berbasis host atau pengguna yang memintas mekanisme auth x11 [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

Kemudian perlihatkan info auth untuk DISPLAY=:0di mesin lokal:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

Hubungkan ke mesin jarak jauh tanpa penerusan X11:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

Buka baris perintah via ~Cdan tambahkan penerusan jarak jauh dari port 6000+43ke soket unix yang sesuai untuk ditampilkan :0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

Atur $DISPLAYenvvar dan tambahkan info auth dari lokal ke mesin jarak jauh:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

Sekarang Anda siap untuk pergi:

hzy64$ xterm

[1] karena perbaikan bug yang salah arah , kontrol akses berbasis pengguna diaktifkan secara default di Debian via /etc/X11/Xsession.d/35x11-common_xhost-local. Lebih buruk lagi, ini adalah satu-satunya yang tersedia secara default di XWayland di mana ia juga tidak dapat dimatikan . Program apa pun yang proksi dari protokol X11 (mis. xscope) Harus melakukan pengecekan cookie auth sendiri x11 (seperti yang dilakukan ssh), kecuali ia ingin membuka lubang yang menganga ke server X11.

mosvy
sumber
1
Jika Anda peduli dengan keamanan, -Xakan sedikit lebih baik daripada -Y, bukan?
Stephen Kitt
13
banyak (sebagian besar?) program X11 tidak bekerja dengan -X, hanya dengan -Y. orang-orang tidak memperhatikan hal itu karena pada banyak sistem (mis. debian) ForwardX11Trusteddiatur ke yesdefault, -Xdan -Yopsi-opsi itu setara ;-)
mosvy