it-swarm-vi.com

Làm cách nào để chuyển tiếp X qua SSH để chạy các ứng dụng đồ họa từ xa?

Tôi có một máy chạy Ubuntu mà tôi SSH từ máy Fedora 14 của tôi. Tôi muốn chuyển tiếp X từ máy Ubuntu trở lại Fedora để tôi có thể chạy các chương trình đồ họa từ xa. Cả hai máy đều trên mạng LAN.

Tôi biết rằng -X tùy chọn cho phép chuyển tiếp X11 trong SSH, nhưng tôi cảm thấy như mình đang thiếu một số bước.

Các bước cần thiết để chuyển tiếp X từ máy Ubuntu sang Fedora qua SSH là gì?

390
Mr. Shickadance

Chuyển tiếp X11 cần được bật ở cả phía máy khách và phía máy chủ.

Trên phía máy khách , tùy chọn -X (Viết hoa X) để ssh cho phép chuyển tiếp X11 và bạn có thể thực hiện đây là mặc định (cho tất cả các kết nối hoặc cho một kết nối cụ thể) với ForwardX11 yes trong ~/.ssh/config .

Ở phía máy chủ , X11Forwarding yes Phải được chỉ định trong /etc/ssh/sshd_config . Lưu ý rằng mặc định là không chuyển tiếp (một số bản phân phối bật nó trong mặc định /etc/ssh/sshd_config) Và người dùng không thể ghi đè cài đặt này.

Chương trình xauth phải được cài đặt ở phía máy chủ. Nếu có bất kỳ chương trình X11 nào ở đó, rất có khả năng xauth sẽ ở đó. Trong trường hợp không chắc chắn xauth đã được cài đặt ở một vị trí không chuẩn, nó có thể được gọi thông qua ~/.ssh/rc (trên máy chủ!).

Lưu ý rằng bạn không cần đặt bất kỳ biến môi trường nào trên máy chủ. DISPLAYXAUTHORITY sẽ tự động được đặt thành giá trị phù hợp của chúng. Nếu bạn chạy ssh và DISPLAY không được đặt, điều đó có nghĩa là ssh không chuyển tiếp kết nối X11.

Để xác nhận rằng ssh đang chuyển tiếp X11, hãy kiểm tra một dòng có chứa Requesting X11 forwarding Trong đầu ra ssh -v -X. Lưu ý rằng máy chủ sẽ không trả lời bằng bất kỳ cách nào, một biện pháp phòng ngừa bảo mật để ẩn chi tiết khỏi những kẻ tấn công tiềm năng.

Để chuyển tiếp X11 hoạt động trên ssh, bạn sẽ cần 3 thứ tại chỗ.

  1. Khách hàng của bạn phải được thiết lập để chuyển tiếp X11.
  2. Máy chủ của bạn phải được thiết lập để cho phép chuyển tiếp X11.
  3. Máy chủ của bạn phải có khả năng thiết lập xác thực X11.

Nếu bạn có cả # 1 và # 2 nhưng thiếu # 3, thì bạn sẽ kết thúc với một biến môi trường HIỂN THỊ trống.

Soup-to-nut, đây là cách để chuyển tiếp X11 hoạt động.

  1. Trên máy chủ của bạn, đảm bảo/etc/ssh/sshd_config chứa:

    X11Forwarding yes
    X11DisplayOffset 10
    

    Bạn có thể cần SIGHUP sshd để nó tiếp nhận những thay đổi này.

    cat /var/run/sshd.pid | xargs kill -1
    
  2. Trên máy chủ của bạn, đảm bảo bạn đã cài đặt xauth.

    [email protected]:~$ which xauth
    /usr/bin/xauth
    

    Nếu bạn chưa cài đặt xauth, bạn sẽ gặp phải vấn đề "biến môi trường HIỂN THỊ trống".

  3. Trên máy khách của bạn, kết nối với máy chủ của bạn. Hãy chắc chắn nói với ssh để cho phép chuyển tiếp X11. tôi thích

    [email protected]:~$ ssh -X [email protected]
    

nhưng bạn có thể thích

    [email protected]:~$ ssh -o ForwardX11=yes [email protected]

hoặc bạn có thể thiết lập điều này trong ~/.ssh/config của bạn.


Tôi đã chạy vào biến môi trường HIỂN THỊ trống này vào đầu ngày hôm nay khi vào một máy chủ mới mà tôi không quản trị. Theo dõi phần xauth mất tích là một niềm vui nhỏ. Đây là những gì tôi đã làm, và những gì bạn cũng có thể làm.

Trên máy trạm cục bộ của tôi, nơi tôi là quản trị viên, tôi đã xác minh rằng/etc/ssh/sshd_config đã được thiết lập để chuyển tiếp X11. Khi tôi ssh -X quay lại localhost, tôi sẽ cài đặt HIỂN THỊ chính xác.

Buộc HIỂN THỊ không được đặt quá khó. Tôi chỉ cần xem sshd và ssh đang làm gì để thiết lập chính xác. Đây là đầu ra đầy đủ của tất cả mọi thứ tôi đã làm trên đường đi.

    [email protected]:~$ mkdir ~/dummy-sshd
    [email protected]:~$ cp -r /etc/ssh/* ~/dummy-sshd/
    cp: cannot open `/etc/ssh/ssh_Host_dsa_key' for reading: Permission denied
    cp: cannot open `/etc/ssh/ssh_Host_rsa_key' for reading: Permission denied

Thay vì sử dụng Sudo để buộc sao chép các tệp ssh_host_ {dsa, rsa} _key của tôi vào vị trí, tôi đã sử dụng ssh-keygen để tạo các tệp giả cho chính mình.

    [email protected]:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_Host_rsa_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.
    Your public key has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.pub.

Rửa và lặp lại với -t dsa:

    [email protected]:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_Host_dsa_key
    # I bet you can visually copy-paste the above output down here

Chỉnh sửa ~/dummy-sshd/sshd_config để trỏ đến các tệp chính ssh_host mới.

    # before
    [email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config 
    HostKey /etc/ssh/ssh_Host_rsa_key
    HostKey /etc/ssh/ssh_Host_dsa_key

    # after
    [email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config 
    HostKey /home/blyman/dummy-sshd/ssh_Host_rsa_key
    HostKey /home/blyman/dummy-sshd/ssh_Host_dsa_key

Bật sshd trên một cổng mới ở chế độ không tách rời:

    [email protected]:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    sshd re-exec requires execution with an absolute path

Rất tiếc, tốt hơn là sửa đường dẫn đó:

    [email protected]:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
    debug1: read PEM private key done: type RSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
    debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
    debug1: private Host key: #0 type 1 RSA
    debug1: read PEM private key done: type DSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
    debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
    debug1: private Host key: #1 type 2 DSA
    debug1: setgroups() failed: Operation not permitted
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-p'
    debug1: rexec_argv[2]='50505'
    debug1: rexec_argv[3]='-f'
    debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
    debug1: rexec_argv[5]='-d'
    Set /proc/self/oom_adj from 0 to -17
    debug1: Bind to port 50505 on 0.0.0.0.
    Server listening on 0.0.0.0 port 50505.
    debug1: Bind to port 50505 on ::.
    Server listening on :: port 50505.

Bật một thiết bị đầu cuối mới và ssh vào localhost trên cổng 50505:

    [email protected]:~$ ssh -p 50505 localhost
    The authenticity of Host '[localhost]:50505 ([::1]:50505)' can't be established.
    RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
    Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
    Ubuntu 10.10

    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/

    1 package can be updated.
    0 updates are security updates.

    Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
    Environment:
      LANG=en_US.UTF-8
      USER=blyman
      LOGNAME=blyman
      HOME=/home/blyman
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
      MAIL=/var/mail/blyman
      Shell=/bin/bash
      SSH_CLIENT=::1 43599 50505
      SSH_CONNECTION=::1 43599 ::1 50505
      SSH_TTY=/dev/pts/16
      TERM=xterm
      DISPLAY=localhost:10.0
    Running /usr/bin/xauth remove unix:10.0
    /usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393

Nhìn vào ba dòng cuối cùng ở đó. Tôi tình cờ có bộ HIỂN THỊ và có hai dòng nhìn đẹp từ/usr/bin/xauth.

Từ đó, trò chơi của trẻ em chuyển sang/usr/bin/xauth sang /usr/bin/xauth.old, ngắt kết nối với ssh và dừng sshd, sau đó khởi chạy sshd và ssh trở lại localhost.

Khi/usr/bin/xauth biến mất, tôi không thấy HIỂN THỊ phản ánh trong môi trường của mình.


Không có gì tuyệt vời đang diễn ra ở đây. Chủ yếu là tôi đã may mắn khi chọn một cách tiếp cận lành mạnh để thử tái tạo điều này trên máy cục bộ của mình.

98
Belden

Đảm bảo rằng:

  • Bạn đã xauth được cài đặt trên máy chủ (xem: xauth info/xauth list).
  • Trên máy chủ, tệp /etc/ssh/sshd_config Của bạn có các dòng sau:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • Về phía khách hàng, tệp ~/.ssh/config Của bạn có các dòng sau:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • Về phía khách hàng, bạn đã cài đặt máy chủ X (ví dụ: macOS: XQuartz; Windows: Xming).


Sau đó, để thực hiện chuyển tiếp X11 bằng SSH, bạn cần thêm -X Vào lệnh ssh của bạn, ví dụ:.

ssh -v -X [email protected]

sau đó xác minh rằng DISPLAY của bạn là không trống bởi:

echo $DISPLAY

Nếu đúng, sau đó có tham số dài dòng cho ssh (-v), Kiểm tra xem có bất kỳ cảnh báo nào không, ví dụ:.

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

Trong trường hợp bạn đã có không đáng tin cậy X11 như được hiển thị ở trên, sau đó thử -Y Thay vào đó nếu bạn tin tưởng Chủ nhà):

ssh -v -Y [email protected]

Xem: Lỗi cảnh báo nào: Thiết lập chuyển tiếp X11 không đáng tin cậy không thành công: dữ liệu khóa xauth không được tạo ra có nghĩa là ý nghĩa khi ssh'ing với -X?


Trong trường hợp bạn đã cảnh báo: Không có dữ liệu xauth, bạn có thể thử tạo tệp .Xauthority Mới, ví dụ:.

xauth generate :0 . trusted
xauth list

Xem: Tạo/xây dựng lại tệp .Xmasterity mới


Nếu bạn đã có một cảnh báo khác với ở trên, hãy làm theo các manh mối tiếp theo.


43
kenorb

Cách khắc phục là thêm dòng này vào /etc/ssh/sshd_config:

X11UseLocalhost no

https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_Vquest_fails_on_channel_0/

21
Ace

Để Ubuntu bash trên Windows 10 chạy ssh -X để có được môi trường GUI trên máy chủ từ xa

  • Đầu tiên

Cài đặt tất cả các mục sau đây. Trên cửa sổ, cài đặt Xming. Trên Ubuntu trong thiết bị đầu cuối, sử dụng Sudo apt install để cài đặt ssh xauth xorg.

Sudo apt install ssh xauth xorg
  • Thứ hai

Chuyển đến thư mục chứa ssh_config tập tin, của tôi là /etc/ssh.

  • Ngày thứ ba

Biên tập ssh_config với tư cách quản trị viên (SỬ DỤNG Sudo). Phía trong ssh_config, xóa băm # trong các dòng ForwardAgent, ForwardX11, ForwardX11Trusted và đặt các đối số tương ứng thành yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • Forth

Trong ssh_config tập tin, xóa băm trước # trước Port 22Protocol 2, và cũng nối thêm một dòng mới ở cuối tệp để nêu vị trí tệp xauth, XauthLocation /usr/bin/xauth, hãy nhớ ghi đường dẫn của tập tin xauth của riêng bạn.

# /etc/ssh/ssh_config

#   IdentifyFile ...
    Port 22
    Protocol 2
#   Cipher 3des
#   ...
#   ...
    ...
    ...
    GSSAPIDelegateCredentials no
    XauthLocation /usr/bin/xauth
  • Thứ năm

Bây giờ vì chúng tôi đã chỉnh sửa xong ssh_config tập tin, lưu nó khi chúng tôi rời khỏi trình chỉnh sửa. Bây giờ hãy vào thư mục ~ hoặc là $HOME, chắp thêm export DISPLAY=localhost:0 cho bạn .bashrc tập tin và lưu nó.

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • Cuối cùng

Chúng ta đang gần hoàn tất. Khởi động lại bash Shell của bạn, mở chương trình Xming của bạn và sử dụng ssh -X [email protected]. Sau đó tận hưởng môi trường GUI.

ssh -X [email protected]

Vấn đề cũng nằm ở hệ thống con Ubuntu trên Windows và liên kết là tại

https://Gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776

5
DestinyOne

Thêm vào X11UseLocalhost no đến /etc/ssh/sshd_config và khởi động lại máy chủ SSH.

Nếu bạn không có HIỂN THỊ, hãy kiểm tra xem xauth có được cài đặt chính xác không và sau đó thử lại.

RHE/CEntos không có vấn đề này, đây là một điều Ubuntu!

4
stephen cooke

Đối với tôi, vấn đề nằm ở gật đầ tùy chọn gắn kết cho hệ thống tập tin/tmp. X11 cần một tập tin đặc biệt để được tạo trong đó.

Vì vậy, hãy kiểm tra các tùy chọn gắn kết cho hệ thống tập tin/tmp là gì nếu bạn sử dụng một phân vùng hoặc đĩa riêng cho việc đó.

1
yakovpol

Để thêm vào các câu trả lời xuất sắc trước đó (thiết lập ~/.ssh/config và kiểm tra xem biến môi trường DISPLAY có được đặt trên máy khách không, thiết lập /etc/ssh/sshd_config và cài đặt xauth trên máy chủ), cũng đảm bảo xterm được cài đặt trên máy khách, ví dụ:.

Sudo apt-get install xterm
1
Aliz Rao

xauth có thể bị khóa.

   -b      This  option  indicates  that  xauth  should  attempt to break any authority file locks before proceeding.  Use this
           option only to clean up stale locks.

Sử dụng

xauth -b

Trên máy mà tôi đang cố gắng ssh thành đã phá khóa trên xauth. Đăng xuất khỏi phiên ssh sau khi phát hành xauth -b sau đó đăng nhập lại cuối cùng đã cho phép tôi thành công echo $DISPLAY. Chắc chắn thử điều này trước khi tạo lại .Xauthority

1
Barton Chittenden

X11Forwarding Phải được đặt trên máy chủ SSH (trong trường hợp của bạn là hộp Ubuntu) trong sshd_config Và bạn phải cho phép X11 được chuyển tiếp cho máy khách SSH (hộp Fedora của bạn) bằng cách chuyển qua Tùy chọn -X Hoặc chỉnh sửa tệp ssh_config Để thêm mặc định ForwardX11.

1
Caleb