Tại sao Firefox quá chậm so với SSH?


39

Tôi cố gắng khởi chạy Firefox qua SSH, sử dụng

ssh -X user@hostname

và sau đó

firefox -no-remote

nhưng nó rất rất chậm.

Làm thế nào tôi có thể sửa lỗi này? Có phải là một vấn đề kết nối?


3
Trừ khi bạn có một số mức mã hóa cực kỳ cao hoặc máy chủ mà bạn đang tải có tải cao, thì đó có thể không phải là phần ssh của phương trình. Đó thường là vấn đề về băng thông và / hoặc độ trễ.
Bratchley


@Gowtham vì vậy tôi có thể sử dụng: ssh -X -C user @ hostname?
DevOps85

Câu trả lời:


25

Cài đặt ssh mặc định tạo ra kết nối khá chậm. Thay vào đó hãy thử các cách sau:

ssh -YC4c arcfour,blowfish-cbc user@hostname firefox -no-remote

Các tùy chọn được sử dụng là:

-Y      Enables trusted X11 forwarding.  Trusted X11 forwardings are not
         subjected to the X11 SECURITY extension controls.
 -C      Requests compression of all data (including stdin, stdout,
         stderr, and data for forwarded X11 and TCP connections).  The
         compression algorithm is the same used by gzip(1), and the
         “level” can be controlled by the CompressionLevel option for pro‐
         tocol version 1.  Compression is desirable on modem lines and
         other slow connections, but will only slow down things on fast
         networks.  The default value can be set on a host-by-host basis
         in the configuration files; see the Compression option.
 -4      Forces ssh to use IPv4 addresses only.
 -c cipher_spec
         Selects the cipher specification for encrypting the session.

         For protocol version 2, cipher_spec is a comma-separated list of
         ciphers listed in order of preference.  See the Ciphers keyword
         in ssh_config(5) for more information.

Điểm chính ở đây là sử dụng một cypher mã hóa khác, trong trường hợp này là arcfour nhanh hơn mặc định và để nén dữ liệu được truyền.


LƯU Ý: Tôi rất, rất xa một chuyên gia về điều này. Lệnh trên là những gì tôi sử dụng sau khi tìm thấy nó trên một bài đăng blog ở đâu đó và tôi đã nhận thấy một sự cải thiện rất lớn về tốc độ. Tôi chắc chắn rằng những người bình luận khác nhau bên dưới biết họ đang nói về điều gì và những người ảo mã hóa này có thể không phải là người giỏi nhất. Rất có khả năng rằng phần duy nhất của câu trả lời này thực sự phù hợp là sử dụng công -Ctắc để nén dữ liệu được truyền.


11
Trên thực tế bằng cách thay đổi cài đặt mã hóa, bạn có thể cải thiện thông lượng của kết nối, nhưng điều đó sẽ hầu như không ảnh hưởng đến độ trễ , điều khiến cho kết nối X-over-ssh rất chậm ... Hoặc nói cách khác: bạn có thể đạt được để chuyển một tệp nhanh hơn, nhưng thời gian cần thiết để bắt đầu chuyển sẽ không thay đổi (gần như). Đó là vấn đề của giao thức X, nó liên quan đến rất nhiều tin nhắn và xác nhận giữa máy khách và máy chủ, do đó, qua internet, độ trễ vài mili giây được nhân lên nhiều lần cho đến khi bạn có thể thấy một nút thay đổi trạng thái của nó.
Ariel

8
-4(IPv4) thực sự liên quan ở đây?
Bắp ngô

6
Mật mã `arcfour" không được dùng nữa, btw.
Tái lập lại Monica - M. Schröder

5
Nén giúp, nhưng không làm việc thần kỳ. Firefox rất khắt khe. Việc thay đổi mật mã khó có thể tạo ra sự khác biệt trừ khi một trong hai bên rất hạn chế về thời gian CPU: với các thiết bị cao cấp như điện thoại thông minh và PC, thời gian mã hóa / giải mã không đáng kể so với độ trễ và băng thông mạng.
Gilles 'SO- ngừng trở nên xấu xa'

6
Các mật mã được đề xuất là cách đi sai . Như Gilles nói, phần lớn các thiết bị ngày nay sẽ không có vấn đề gì với AES-CTR mặc định: nó rất nhanh, đặc biệt nếu phần cứng được sử dụng có tập lệnh AES. RC4 yếu và bị loại bỏ dần trên mạng và Blowfish-CBC có thể không nhất thiết phải nhanh hơn AES-CTR.
Reid

32

Một trong những vấn đề lớn nhất khi khởi chạy một số máy khách X từ xa là giao thức X, không quá nhiều chi phí ssh! Giao thức X yêu cầu rất nhiều ping-pong'ing giữa máy khách và máy chủ, điều này hoàn toàn giết chết hiệu năng trong trường hợp các ứng dụng từ xa.

Hãy thử một cái gì đó như "x2go" (cũng đi qua ssh với các thiết lập mặc định) trong bạn sẽ nhận thấy rằng firefox "bay" so sánh!

Một số bản phân phối cung cấp các gói x2go ngoài hộp, ví dụ như thử nghiệm Debian hoặc trong Stable-Backports. Nhưng nếu không, hãy xem http://wiki.x2go.org/doku.php/doad:start , họ cung cấp các gói / kho lưu trữ nhị phân dựng sẵn cho nhiều bản phân phối. Bạn nên cài đặt x2goclient (trên máy tính nơi bạn muốn 'sử dụng' firefox) và x2goserver (trong máy tính có chạy firefox), sau đó bạn có thể định cấu hình phiên của mình cho các ứng dụng X đơn cho chế độ xem toàn màn hình, v.v. xảy ra trên ssh. Đó là một công cụ thực sự tuyệt vời :)

Để sử dụng nó, bạn chạy "x2goclient", nó khởi động GUI nơi bạn có thể tạo phiên mới: bạn cung cấp tên dns của máy chủ, cổng, dữ liệu ssh, v.v. và sau đó bạn chọn "loại phiên", nghĩa là, nếu bạn muốn có một máy tính để bàn KDE hoặc Gnome từ xa đầy đủ, hoặc chỉ là một "ứng dụng duy nhất" và ở đó bạn nhập "firefox".


1
Làm thế nào tôi có thể thử x2go? lệnh
DevOps85

3
Dường như không có x2goservergói nào trên Debian (hoặc Ubuntu). Ngoài ra, điều này có thể được cấu hình để cho phép đường hầm? Ví dụ, tôi sử dụng machineX nhưng tôi chỉ có thể ssh với nó thông qua machineY. X2go có thể đối phó với điều đó?
terdon

@terdon bạn nói đúng, tôi chỉ kiểm tra khách hàng. Nhưng bạn chỉ có thể thêm kho lưu trữ x2go (xem liên kết wiki.x2go.org/doku.php/doad:start ) và máy chủ ở đó. Tôi không biết tại sao chỉ có máy khách trong Debian. Đường hầm: chắc chắn là có thể, nhưng không bao giờ thử nó. Tôi hy vọng nó chỉ đủ để cấu hình ssh trong ~/.ssh/configvà sử dụng tên máy chủ (đường hầm) bên phải trong phiên x2go của bạn.
Ariel

@terdon: có tùy chọn "Sử dụng máy chủ proxy để kết nối SSH" (ssh / http) trong cấu hình phiên x2go. Vì vậy, nên làm cũng lừa!
Ariel

Điều này có vẻ thú vị, tôi sẽ chơi với nó nhiều hơn nữa. Cho đến nay tôi có thể xác nhận rằng cấu hình đường hầm trong .ssh/configlà không đủ. Tôi đã thiết lập nó để ssh machineBthực sự chạy qua một đường hầm xuyên qua machineAnhưng x2go dường như không nhìn thấy nó.
terdon

17

Tôi có nhiều kinh nghiệm hơn trong việc sử dụng một sshđường hầm để định tuyến giao thông qua một máy khác. Thật dễ dàng để thiết lập vì dù sao bạn cũng có quyền truy cập ssh. Trong một thiết bị đầu cuối trên máy tính của bạn, gõ

ssh -vv -ND 8080 user@yourserver

Giữ cửa sổ này mở và xem nó cung cấp một số thông điệp dài dòng về dữ liệu chảy qua đường hầm.

Trong firefox, đi đến Tùy chọn -> Nâng cao -> Mạng -> Kết nối: Cài đặt.

Chọn cấu hình proxy thủ công và thêm SOCKS v5proxy:

 SOCKS Host:   localhost    Port 8080

Kiểm tra IP mới của bạn bằng cách điều hướng đến ví dụ: http://whatismyipaddress.com/ .

Bạn có thể sử dụng một add-on firefox như foxy proxy để tự động chuyển proxy.


Được nâng cấp, đây là một giải pháp thay thế rất hợp lệ cho việc sử dụng nén dựa trên NX (x2go, v.v.), hữu ích hơn nhiều so với việc thay đổi cài đặt mã hóa ssh :)
Ariel

Tôi đã luôn sử dụng ssh -L 8080: localhost: 8080, nhưng thích tùy chọn -ND nhưng không chắc tại sao bạn lại sử dụng Dinamic thay thế hoặc Remote hoặc Nghe. Nhân tiện, sử dụng proxy tốt hơn nhiều so với sử dụng -X, nhưng, tôi nghĩ cách tốt hơn là sử dụng VNC nếu bạn cần nhiều chương trình X hơn chứ không chỉ Firefox.
erm3nda

Dễ dàng thiết lập và hoạt động hiệu quả!
david.perez

2

Firefox quá chậm so với SSH vì các bản dựng firefox mới hơn cho phép nhiều trường hợp. Nếu bạn gặp vấn đề về băng thông, hãy sử dụng trình duyệt nhẹ như dillo và bạn thậm chí sẽ không nhận thấy tốc độ kết nối.


Câu trả lời này là từ một bài đăng trên diễn đàn ArchLinux .
Andrew T.

1
vấn đề này không liên quan gì đến vấn đề - vấn đề không phải là trình duyệt mà là giao thức từ xa X11
João Antunes

0

Một điều khác sẽ cải thiện trình duyệt của bạn qua ssh là cho phép đường ống trong Firefox. Mở about:configvà thay đổi network.http.pipeliningthành đúng.


Tùy chọn đó sẽ giúp tải trang web nhanh hơn, nhưng hoàn toàn không liên quan đến thực tế là trình duyệt có chạy qua đường hầm SSH hay không. Dù sao, hãy cẩn thận với "nhưng" khi bạn chạm vào các tùy chọn nâng cao ... xem kb.mozillazine.org/Network.http.pipelining
Ariel

Theo kinh nghiệm của tôi, việc duyệt qua ssh bị chậm và các yêu cầu đường ống là một sự trợ giúp lớn vì nếu không, bất kỳ yêu cầu nào được đưa ra đều phải chờ những yêu cầu trước đó có thể hoặc không thể hoàn thành kịp thời nếu có. Tôi cũng kết hợp điều này với ghép kênh ssh. Nó làm cho một sự khác biệt đáng chú ý. Tắt đường ống trở lại là chậm không chịu nổi trong trường hợp của tôi.
Tanath

0

Bạn phải thử nghiệm để xem những gì giúp với các tắc nghẽn cụ thể của bạn.

Đối với tôi, cho phép nén ( -C) cải thiện khả năng phản hồi từ không sử dụng đến độ trễ đáng chú ý.

Lựa chọn mật mã cũng có thể có tác động, trái với những gì một số người nói. Bạn có thể tìm thấy những người chia sẻ điểm chuẩn trực tuyến, nhưng đừng cho rằng kết quả của bạn sẽ giống nhau. Mật mã nào là tốt nhất cho bạn là phụ thuộc vào phần cứng. Đối với tôi mật mã mặc định của tôi (chacha20-poly1305@openssh.com) đã được gắn cho mã nhanh nhất.

Tôi đã viết một kịch bản nhanh để đánh dấu các mật mã có liên quan trong các điều kiện hơi thực tế. Giải thích trong các ý kiến:

#!/usr/bin/bash

# Ciphers available to you depends on the intersection of ciphers compiled 
# into your client and the ciphers compiled into your host.
# Should be manually copied from "Ciphers:" section in your `man ssh_config`
# The script will try all ciphers specified here and will gracefully skip
# ciphers unavailable in the host.
#ciphers=""
# Example:
ciphers="3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com chacha20-poly1305@openssh.com"

tmp_file=tmp.bin

# Recommend to use an identity file without a passphrase.
# That way you won't have to retype the password at each iteration.
ssh_identity_file=~/.ssh/tmp_id_no_passphrase

ssh_host="user@host"

# Size of test file, before encryption.
test_file_size_megabytes=8

# Only create test file if it doesn't yet exists.
# Doesn't check if relevant variables changed, so you'll have to delete
# the $tmp_file to regenerate it.
if test ! -f $tmp_file; then
  echo "Creating random data file" \
    "(size $test_file_size_megabytes MB): $tmp_file"

  # Not the same format as the ssh ciphers.
  # Can be left as is, unless this cipher is not supported by your openssl.
  tmp_file_cipher=aes-128-cbc

  # The purpose of encrypting the $tmp_file is to make it uncompressable.
  # I do not know if that is a concern in this scenario,
  # but better safe than sorry.

  dd if=/dev/zero bs=1M count=$test_file_size_megabytes \
    | openssl enc -$tmp_file_cipher -pass pass:123 \
    > $tmp_file
fi

for cipher in $ciphers ; do
  # Benchmark each $cipher multiple times
  for i in 1 2 3 ; do
    echo
    echo "Cipher: $cipher (try $i)"
    # Time piping the $tmp_file via SSH to $ssh_host using $cipher.
    # At destination received data is discarded.
    cat $tmp_file \
      | /usr/bin/time -p \
      ssh -i $ssh_identity_file -c "$cipher" $ssh_host 'cat > /dev/null'
  done
done

# Sample output:

# Creating random data file (size 8 MB): tmp.bin
# *** WARNING : deprecated key derivation used.                                   Using -iter or -pbkdf2 would be better.                                         8+0 records in
# 8+0 records out
# 8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.0567188 s, 148 MB/s

## [redacted]

# Cipher: aes256-cbc (try 3)
# Unable to negotiate with 192.168.99.99 port 22: no matching cipher found. Their offer: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
# real 0.12
# user 0.03
# sys 0.03

# Cipher: aes128-ctr (try 1)
# real 9.68
# user 0.28
# sys 0.51

# Cipher: aes128-ctr (try 2)
# real 10.85
# user 0.26
# sys 0.29

## [redacted]

Bạn có thể chọn kiểm tra kết nối SSH trong đó máy khách và máy chủ là cùng một máy hoặc bạn có thể kiểm tra trong một kịch bản thực tế hơn, trong đó máy chủ là máy bạn đang thực hiện chuyển tiếp X11, sẽ hữu ích hơn, bởi vì hiệu suất không chỉ phụ thuộc vào giải mã hiệu suất của máy khách mà còn phụ thuộc vào máy chủ.

Thử nghiệm với một máy từ xa có thể có nhược điểm là gây ra tiếng ồn nếu thông lượng kết nối internet của bạn thay đổi trong quá trình chuẩn. Trong trường hợp đó, có thể muốn tăng số lần mỗi mật mã được kiểm tra.

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.