Sau khi `ssh` không có` -X` cho máy, có thể thay đổi` $ HIỂN THỊ` để làm cho nó hoạt động như` ssh -X` không?


22

Sau khi sshkhông có -Xmáy, có thể thay đổi một số cài đặt (ví dụ $DISPLAY) để làm cho nó hoạt động như thế ssh -Xnào không? Nếu không, lý do là gì? Cảm ơn.


Tôi đề nghị làm cho tiêu đề câu hỏi ngắn hơn bằng cách bỏ đi 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.
Dmitry Grigoryev

Câu trả lời:


33

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 DISPLAYbiế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, sshkhô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.

X11 Chuyển tiếp bằng tay

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=:0trê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 ~Cvà thêm một chuyển tiếp từ xa từ cổng 6000+43vào ổ cắm unix tương ứng để hiển thị :0:

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

Đặt $DISPLAYenvvar 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.


1
Nếu bạn quan tâm đến bảo mật, -Xsẽ tốt hơn một chút -Ychứ?
Stephen Kitt

13
nhiều chương trình X11 (hầu hết?) không hoạt động -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 yesmặc định và các tùy chọn -X-Ytương đương ;-)
mosvy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.