Câu trả lời:
Bạn có thể tạo kết nối thứ hai với tính năng chuyển tiếp X11 và sau đó bạn cũng có thể sử dụng DISPLAY
biến môi trường từ kết nối thứ hai trong kết nối thứ nhất.
Trong cửa sổ thứ 1:
$ ssh user@host
user@host$ ...
Trong cửa sổ thứ 2:
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
Quay lại cửa sổ thứ 1:
user@host$ export DISPLAY=localhost:10.0
user@host$ xterm
Thật không may, ssh
không có gì để chứa các chuyển tiếp X11 (hoặc khác) cho quy trình / phiên mà nó đã bắt đầu hoặc cho người dùng mà nó chạy như trên máy từ xa (ví dụ: bằng cách sử dụng ổ cắm Unix có / kiểm tra thông tin xác thực hoặc bằng cách sử dụng không gian tên), và những chuyển tiếp đó là các ổ cắm nghe tcp đơn giản mà bất kỳ ai trên máy từ xa có thể kết nối; tất cả sự bảo mật của chuyển tiếp X11 phụ thuộc vào xác thực X11.
Trang chủ sshd_config(5)
đề cập rằng:
vô hiệu hóa chuyển tiếp X11 không ngăn người dùng chuyển tiếp lưu lượng X11, vì người dùng luôn có thể cài đặt chuyển tiếp của riêng họ.
Đây là cách bạn có thể làm điều đó bằng tay.
Trước hết, hãy chắc chắn vô hiệu hóa mọi điều khiển truy cập dựa trên máy chủ hoặc người dùng bỏ qua cơ chế xác thực x11 [1]:
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
Sau đó hiển thị thông tin xác thực cho DISPLAY=:0
trên máy cục bộ:
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
Kết nối với máy từ xa mà không cần chuyển tiếp X11:
$ ssh user@hzy64
user@hzy64's password:
[motd snipped]
Mở dòng lệnh thông qua ~C
và thêm một chuyển tiếp từ xa từ cổng 6000+43
vào ổ cắm unix tương ứng để hiển thị :0
:
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
Đặt $DISPLAY
envvar và thêm thông tin xác thực từ cục bộ vào máy từ xa:
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
Bây giờ bạn đã sẵn sàng để đi:
hzy64$ xterm
[1] do lỗi sai , điều khiển truy cập dựa trên người dùng được bật theo mặc định trong Debian thông qua /etc/X11/Xsession.d/35x11-common_xhost-local
. Tồi tệ hơn, đó là thứ duy nhất có sẵn theo mặc định trong XWayland, nơi nó cũng không thể tắt được . Bất kỳ chương trình nào ủy quyền của giao thức X11 (ví dụ xscope
) sẽ phải thực hiện kiểm tra cookie auth x11 của riêng nó (theo cách ssh làm), trừ khi nó muốn mở một lỗ hổng cho máy chủ X11.
-X
sẽ tốt hơn một chút -Y
chứ?
-X
, chỉ với -Y
. mọi người không nhận thấy rằng vì trên nhiều hệ thống (ví dụ: debian) ForwardX11Trusted
được đặt thành yes
mặc định và các tùy chọn -X
và -Y
tương đương ;-)
change $DISPLAY to
. Tiêu đề câu hỏi hiện tại không thể được hiển thị đầy đủ trong kết quả tìm kiếm và thay đổi $ HIỂN THỊ thực sự là một phần của câu trả lời, không phải là một phần của câu hỏi.