Bagaimana cara mengaktifkan penerusan SSH X11 melalui server tambahan?

33

Saya memiliki host A, B dan C. Dari host AI hanya dapat mengakses melalui ssh B. Dari BI dapat mengakses C. Saya ingin dapat menjalankan program X11 pada layar C dan meneruskan ke A.

Saya mencoba ini:

A $ ssh -XB
B $ ssh -XC
C $ xclock
Kesalahan: Tidak dapat membuka tampilan:

Tapi itu tidak berhasil.

lexsys
sumber

Jawaban:

25

Ada beberapa cara untuk melakukan ini, yang saya sukai adalah meneruskan port ssh:

Pertama, sambungkan ke mesin B dan teruskan [localPort] ke C: 22 hingga B

A$ ssh -L [localPort]:C:22 B

Selanjutnya, sambungkan ke C dari A melalui terowongan yang baru dibuat ini menggunakan [localPort], meneruskan X11

A$ ssh -X -p [localPort] localhost

Sekarang kita dapat menjalankan program X11 pada C dan menampilkannya pada A.

C$ xclock

[localPort] dapat berupa port apa saja yang belum Anda dengarkan di A, saya sering menggunakan 2222 untuk kesederhanaan.

dave
sumber
3
tidak persis ... jika X11Forwarding tidak diaktifkan di server C, itu tidak akan berfungsi. itu juga tidak akan bekerja kecuali satu set AllowTcpForwarding ya dan GatewayPorts ya di server B. jawaban ini tidak dapat diterima sama sekali
asdmin
Anda membuat poin yang bagus, saya tidak melihat ini karena saya menggunakan debian, di mana X11Forwarding dan AllowTcpForwarding diaktifkan secara default. GatewayPort tidak diperlukan karena ketika dinonaktifkan, SSH masih mendengarkan di localhost dan itulah yang kami sambungkan. Anda hanya akan memerlukannya jika Anda ingin membuat koneksi kedua melalui IP eksternal untuk mesin A.
dave
Pada langkah 1, tidak meminta saya kata sandi untuk host B, dan saya akhirnya terhubung di host C. Di jendela lain saya mencoba langkah 2 dan saya mendapatkan "ssh_exchange_identification: Koneksi ditutup oleh host jarak jauh".
msb
ssh: terhubung ke host ... port 22: Sambungan ditolak saat menjalankan perintah pertama
Rodrigo
7

Ini dapat dengan mudah dicapai dengan menggunakan penerusan port:

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock

Port localhost: 2022 diteruskan ke C: 22 via B SSH ke C via localhost: 2022 Gunakan X seperti biasa

AgenK
sumber
2
Ini tidak akan bekerja untuk alasan yang sama yang dicatat di tempat lain dalam kasus B (gateway) tidak memiliki opsi penerusan sshd yang benar diaktifkan.
g33kz0r
tidak meminta kata sandi saya untuk menjadi tuan rumah B, yang aneh; dan tidak berhasil, saya mendapat pesan kesalahan "saluran 2: buka gagal: dilarang secara administratif: buka gagal ssh_exchange_identification: Koneksi ditutup oleh host jarak jauh"
msb
4

Dengan asumsi masalahnya adalah bahwa mesin tengah tidak memiliki X, tetapi jika tidak dikonfigurasi untuk memungkinkan penerusan X11, cukup instal xauth.

pada sistem berbasis yum (fedora, redhat, centos):

B$ sudo yum install xauth

pada sistem berbasis apt (debian, ubuntu):

B$ sudo apt-get install xauth
Jayen
sumber
Yay- sempurna untuk pi raspberry tanpa kepala.
cmc
@cmc atau menggunakan ssh seperti vpn.
Jayen
@cmc apakah Anda memiliki yumpi?
Jayen
tidak sudo apt-get install xauth
cmc
3

Untuk versi yang lebih baru opensshd Anda harus menonaktifkan X11UseLocalhostini agar berfungsi.

Anda perlu melakukan ini di Host C /etc/ssh/sshd_configdan mulai ulang sshd agar ini berfungsi:

X11Forwarding yes
X11UseLocalhost no
Brad Allison
sumber
2

Anda tidak dapat meneruskan layar X11 jika X11 Forwarding Anda dinonaktifkan di sshd apa pun yang Anda gunakan.

man sshd_config:

X11Forwarding
  Specifies whether X11 forwarding is permitted. The argument must be “yes”
  or “no”.  The default is “no”.

Anda harus memastikan X11Forwarding diaktifkan di tujuan dan semua sshds perantara yang Anda gunakan.

Hanya sedikit petunjuk: Anda harus mencoba menggunakan VNC, penerusan tampilan X11 cukup memakan bandwidth.

asdmin
sumber
Saran @ AgentK dan @ dave hanya memerlukan X11Forwarding diaktifkan pada host terakhir, karena mereka menggunakan terowongan SSH untuk mem-bypass host perantara. Saran Anda hampir pasti mengapa metode OP gagal pada awalnya, tetapi itu tidak berarti jawaban orang lain "tidak dapat diterima"
Daniel Lawson
jawaban mereka cacat dan memperbaiki masalah, bukan menyelesaikannya. jawaban yang benar dan berguna akan mempertimbangkan pertanyaan asli dan menyelesaikannya, dan menyediakan cara lain hanya jika pertanyaan aslinya tidak dapat dipecahkan. by the way, tak satu pun dari mereka yang disebutkan X11Forwarding, yang penting
asdmin
Pada beberapa sistem standarnya adalah " yes".
Brad Gilbert
Saya memeriksa, bahwa X11Forwarding diaktifkan pada B dan C dan AllowTcpForwarding diatur ke ya pada B. Tapi hasil dari perintah saya sama. Dan jawaban dave bekerja dengan baik untukku.
lexsys
lalu lakukan itu, tapi itu hanya obat. Anda juga dapat memulai ssh dengan parameter '-v', atau coba echo $ DISPLAY semua perintah ssh bersarang untuk menemukannya di mana $ DISPLAY hilang
asdmin
2

Jika Anda sering beralih dari A ke C, Anda dapat mengonfigurasi B sebagai proxy:

A:~/.ssh/config:

Host C
  ForwardX11   yes
  ProxyCommand ssh -W %h:%p B

maka itu hanya:

A$ ssh C xclock
Jayen
sumber
1

Sudahkah Anda mencoba

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock

Bendera -Y "Mengaktifkan penerusan X11 tepercaya."

pyhimys
sumber
Hasil yang sama.
lexsys
Ini bekerja untuk saya, tetapi hanya untuk mengetahui seberapa lambat X11
Rodrigo