Làm cách nào để bật chuyển tiếp SSH X11 qua máy chủ bổ sung?


33

Tôi có máy chủ A, B và C. Từ máy chủ AI chỉ có thể truy cập thông qua ssh B. Từ BI có thể truy cập C. Tôi muốn có thể chạy các chương trình X11 trên C và chuyển tiếp hiển thị sang A.

Tôi đã thử điều này:

$ Ssh -XB
B $ ssh -XC
C $ xclock
Lỗi: Không thể mở màn hình:

Nhưng nó không hoạt động.

Câu trả lời:


25

Có một số cách để làm điều này, cách tôi thích là chuyển tiếp cổng ssh:

Đầu tiên, kết nối với máy B và chuyển [localPort] sang C: 22 đến B

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

Tiếp theo, kết nối với C từ A thông qua đường hầm mới được tạo này bằng [localPort], chuyển tiếp X11

A$ ssh -X -p [localPort] localhost

Bây giờ chúng ta có thể chạy các chương trình X11 trên C và hiển thị chúng trên A

C$ xclock

[localPort] có thể là bất kỳ cổng nào mà bạn chưa nghe trên A, tôi thường sử dụng 2222 để đơn giản.


3
không chính xác ... nếu X11Forwarding không được bật trên máy chủ C, nó sẽ không hoạt động. nó cũng sẽ không hoạt động trừ khi một bộ AllowTcpForwarding yes và GatewayPorts có trên máy chủ B. câu trả lời này hoàn toàn không được chấp nhận
asdmin

Bạn nói rõ, tôi không nhận thấy điều này vì tôi sử dụng debian, trên đó X11Forwarding và AllowTcpForwarding được bật theo mặc định. GatewayPorts không cần thiết vì khi nó bị vô hiệu hóa, SSH vẫn lắng nghe trên localhost và đó là những gì chúng tôi đang kết nối. Bạn sẽ chỉ cần nó nếu bạn muốn tạo kết nối thứ hai thông qua IP bên ngoài cho máy A.
dave

Ở bước 1, nó không hỏi tôi mật khẩu cho máy chủ B và cuối cùng tôi đã kết nối với máy chủ C. Trong một cửa sổ khác, tôi đã thử bước 2 và tôi nhận được "ssh_exchange_identification: Kết nối được đóng bởi máy chủ từ xa".
msb

ssh: kết nối với máy chủ ... cổng 22: Kết nối bị từ chối trong khi thực hiện lệnh đầu tiên
Rodrigo

7

Điều này có thể dễ dàng được thực hiện bằng cách sử dụng chuyển tiếp cổng:

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

Cổng localhost: 2022 được chuyển tiếp đến C: 22 qua B SSH đến C qua localhost: 2022 Sử dụng X như bình thường


2
Điều này sẽ không hoạt động vì những lý do tương tự được ghi nhận ở nơi khác trong trường hợp B (cổng) không có tùy chọn chuyển tiếp sshd chính xác được bật.
g33kz0r

đã không hỏi mật khẩu của tôi để lưu trữ B, điều này thật kỳ lạ; và nó không hoạt động, tôi nhận được thông báo lỗi "kênh 2: mở không thành công: bị cấm về mặt hành chính: mở thất bại ssh_exchange_identification: Kết nối bị đóng bởi máy chủ từ xa"
msb

4

Giả sử vấn đề là máy giữa không có X, nhưng nó được cấu hình để cho phép chuyển tiếp X11, chỉ cần cài đặt xauth.

trên hệ thống dựa trên yum (fedora, redhat, centos):

B$ sudo yum install xauth

trên hệ thống dựa trên apt (debian, ubfox):

B$ sudo apt-get install xauth

Yay- hoàn hảo cho pi mâm xôi không đầu.
cmc

@cmc hoặc sử dụng ssh như vpn.
Jayen

@cmc bạn có yumtrên pi không?
Jayen

không - sudo apt-get install xauth
cmc

3

Đối với các phiên bản mới hơn opensshd, bạn phải vô hiệu hóa X11UseLocalhostđể hoạt động này.

Bạn cần làm điều này trên Host C's /etc/ssh/sshd_configvà khởi động lại sshd để nó hoạt động:

X11Forwarding yes
X11UseLocalhost no

2

Bạn không thể chuyển tiếp hiển thị X11 nếu bạn đã tắt X11Forwarding trong bất kỳ sshd nào bạn đang sử dụng.

người đàn ông sshd_config:

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

Bạn phải đảm bảo X11Forwarding được bật ở đích tất cả các sshds trung gian bạn đang sử dụng.

Chỉ là một gợi ý nhỏ: bạn nên thử sử dụng chuyển tiếp hiển thị VNC, X11 khá tốn băng thông.


Đề xuất của @ AgentK và @ dave chỉ yêu cầu bật X11Forwarding trên máy chủ cuối cùng, vì họ sử dụng đường hầm SSH để bỏ qua máy chủ trung gian. Đề xuất của bạn gần như chắc chắn là lý do tại sao phương pháp của OP thất bại lúc đầu, nhưng điều đó không có nghĩa là câu trả lời của người khác "không được chấp nhận"
Daniel Lawson

câu trả lời của họ bị khiếm khuyết và khắc phục vấn đề, không giải quyết nó. một câu trả lời đúng và hữu ích sẽ xem xét câu hỏi ban đầu và giải quyết nó, và chỉ cung cấp những cách khác trong trường hợp câu hỏi gốc không thể giải được. bằng cách này, cả hai đều không đề cập X11Forwarding, đó là điều cần thiết
asdmin

Trên một số hệ thống, mặc định là " yes".
Brad Gilbert

Tôi đã kiểm tra, X11Forwarding được bật trên B và C và AllowTcpForwarding được đặt thành có trên B. Nhưng kết quả của các lệnh của tôi là như nhau. Và câu trả lời của dave hoạt động tốt cho tôi.
lexsys

sau đó làm điều đó, nhưng nó chỉ là một phương thuốc. bạn cũng có thể bắt đầu ssh với tham số '-v' hoặc thử echo $ HIỂN THỊ tất cả các lệnh ssh lồng nhau để tìm ra nơi $ HIỂN THỊ bị mất
asdmin

2

Nếu bạn thường xuyên đi từ A đến C, bạn có thể định cấu hình B làm proxy:

A:~/.ssh/config:

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

sau đó chỉ là:

A$ ssh C xclock

1

Bạn đã thử với

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

Cờ -Y "Cho phép chuyển tiếp X11 đáng tin cậy."


Kết quả tương tự.
lexsys

Điều này làm việc với tôi, nhưng chỉ để khám phá mức độ chậm của X11
Rodrigo
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.