Không gian tên mạng, ssh, X11


7

Tôi kết nối (thông qua ssh -Y ...) từ một máy (= client) với một máy khác (= máy chủ, thực sự trong mạng LAN của tôi, nhưng nó không liên quan); sau đó tôi bắt đầu một không gian tên mạng mới (viết tắt là NNS) trên máy chủ, tôi bắt đầu một xterm (từ không gian tên mặc định) được hiển thị hoàn hảo trên máy khách của tôi và cuối cùng, từ trong xterm, tôi tham gia NNS không mặc định ,

ip netns exec NNSName bash

Tôi có thể kiểm tra xem tôi có trong NNS mới không,

ip netns identify $$

và tôi có thể chạy các chương trình phức tạp như, ví dụ, OpenVPN từ bên trong NNS mới.

Chà là ở đây: Tôi muốn bắt đầu một ứng dụng đồ họa (ngay cả xeyeslúc này) từ bên trong NNS mới, nhưng tôi không thể, tôi luôn được thông báo:Unable to open DISPLAY=...

Phải thừa nhận rằng, tôi chỉ thử một điều hiển nhiên:

DISPLAY=:0.0
DISPLAY=:10.0
DISPLAY=localhost:10.0
DISPLAY=localhost:20.0
DISPLAY=ClientName:10.0
DISPLAY=ClientIPAddress:10.0

luôn luôn với xhost +khách hàng, cho mục đích gỡ lỗi thuần túy.

Tôi không có vấn đề:

  1. kết nối thông qua ssh -Y ....từ máy khách đến máy chủ, chạy xeyestrên máy chủ và hiển thị nó trên máy khách;

  2. bắt đầu một NNS mới trên máy chủ và bắt đầu các ứng dụng đồ họa trong NNS sẽ được hiển thị trên máy chủ ( nghĩa là trong trường hợp này hãy quên máy khách).

Đó là khi tôi đặt hai thứ này lại với nhau (ssh và không gian tên) mà tôi không thể hiển thị trên các ứng dụng khách đang chạy trong NNS mới của máy chủ.

Nó xuất hiện cổng TCP 6010 tiêu chuẩn thuộc về phiên ssh với NNS mặc định, trong khi NNS mới phải có riêng. Tôi chắc chắn có thể khởi động máy chủ ssh trong NNS mới và kết nối trực tiếp từ máy khách với NNS mới của máy chủ, nhưng tôi tự hỏi: có cách nào dễ dàng hơn để làm điều này không, tức là hiển thị các ứng dụng đồ họa chạy trong NNS mới của máy chủ trên máy chủ X11 của máy khách?

Câu trả lời:


3

Tôi đã ở trong một tình huống tương tự, đây là cách tôi làm việc xung quanh nó.

Một số nền tảng: Tôi đã phải mở rộng một số phiên bản Firefox selenium trong các không gian tên để liên kết chúng với các địa chỉ IP khác nhau. Nhưng như bạn biết tôi đã gặp lỗi:

Error: Can't open display: localhost:10.0

Thay vì làm việc với các ổ cắm unix như Marius đề xuất, tôi chỉ ràng buộc SSHD X11Forwarding với * thay vì localhost (thêm "X11UseLocalhost no" vào cấu hình) và chuyển hướng các kết nối TCP đơn giản với socat.

Chú ý đến hậu quả an ninh của việc này !!!!

Sau thay đổi này trên sshd, HIỂN THỊ sẽ tự động thay đổi khi bạn đăng nhập từ đây:

 DISPLAY=localhost:10.0

Để một cái gì đó như:

 DISPLAY=10.0.0.1:10.0

Sau đó tôi chỉ phải chuyển hướng:

ip netns exec my-NNS socat tcp-listen:6010,reuseaddr,fork tcp:192.168.5.130:6010 &

Sau đó, bạn sẽ có thể làm việc với xeyes, firefox, x-bất cứ điều gì bạn muốn ...:

ip netns exec my-NNS xeyes &

Và Voila!


1

Trên thực tế, dường như không có cách làm tiêu chuẩn nào.

Có một giải pháp rõ ràng nhất: từ trong không gian tên mạng, khởi động sshmáy chủ, sau đó kết nối với nó từ bất kỳ máy từ xa nào với tùy chọn thông thường,

ssh -Y me@network.namespace.IP.address

sau đó bất kỳ chương trình đồ họa nào cũng có thể được khởi động trên máy chủ X11 của máy từ xa. Tất cả các loại biến thể trên cùng một chủ đề, như vnc, cũng hoạt động.

Ngoài ra , người ta có thể sử dụng các công cụ thông thường: iptables, netcat, socat. Đây là một cách để làm điều đó với socat: mẹo là, trong khi các localhostkhông gian trên máy chủ và trên không gian tên mạng mới của nó đã được tách ra, các ổ cắm unix X11 của chúng thì không. Trong thực tế, từ không gian tên mạng, bạn có thể mở ngay các ứng dụng đồ họa sẽ được hiển thị trên máy chủ X của máy mẹ. Vì vậy, bằng cách buộc không gian tên mạng để ghi vào một ổ cắm unix mới trên máy mẹ, chúng ta có thể chuyển hướng dữ liệu được gửi đến các ổ cắm mới cho khách hàng máy chủ X bằng phương tiện của ssh thường X11-chuyển tiếp trên máy chủ, thậm chí không cần kết nối không gian tên mạng mới, đưa ra một giải pháp đơn giản hơn.

Nó được thực hiện như sau: trong không gian tên mạng mới,

export DISPLAY=:1

Điều này sẽ ghi vào một ổ cắm Unix mới /tmp/.X11-unix/X1, chưa được kết nối với bất kỳ thứ gì. Trong máy khách từ xa, sử dụng lệnh

socat exec:'ssh me@remoteserver socat unix-l\:/tmp/.X11-unix/X1 -' unix:/tmp/.X11-unix/X0

(chú ý thoát ra :). Lệnh trên sẽ gửi đầu vào của unix/:1ổ cắm trên máy chủ, đến unix/:0ổ cắm trên máy khách. Bạn có thể phải thư giãn các xhostđiều khiển cục bộ (= trên máy khách) và kiểm tra quyền sở hữu của ổ cắm unix/:1(= :1= /tmp/.X11-unix/X1). Điều này đơn giản hơn đáng kể so với phương pháp trước đây: không cần thiết lập máy chủ ssh trên không gian tên mạng mới, thậm chí không nhận địa chỉ IP. Nó cũng bỏ qua tất cả các vấn đề về ủy quyền X11, như sử dụng xhostđể cho phép một số người dùng từ xa hoặc sử dụng cookie ma thuật MIT với socat(tôi thậm chí không chắc chắn điều này có thể được thực hiện).

Có nhiều cách khác để làm điều này (ví dụ bằng cách chặn -nolisten tcptùy chọn trên máy chủ X của máy khách, sau đó sử dụng socat để chuyển tiếp :1ổ cắm unix sang cổng TCP6000 của máy khách), nhưng, thậm chí bỏ qua việc chúng gây ra sự cố bảo mật nghiêm trọng, chúng là không chuẩn bởi bất kỳ sự kéo dài của trí tưởng tượng.

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.