Почему Firefox так медленно работает по SSH?


39

Я пытаюсь запустить Firefox через SSH, используя

ssh -X user@hostname

а потом

firefox -no-remote

но это очень очень медленно.

Как я могу это исправить? Это проблема с подключением?


3
Если вы не обладаете каким-то невероятно высоким уровнем шифрования или если сервер, на который вы работаете, имеет высокую нагрузку, это, вероятно, не является частью SSH. Обычно это проблема пропускной способности и / или задержки.
Братчли

1
Взгляните на это: stackoverflow.com/q/12977879/252489
Gowtham

@Gowtham, поэтому я могу использовать: ssh -X -C user @ hostname?
DevOps85

Ответы:


25

Настройки ssh по умолчанию обеспечивают довольно медленное соединение. Попробуйте следующее:

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

Используемые параметры:

-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.

Главное здесь - использовать другой шифровальный шифр, в данном случае arcfour, который быстрее, чем по умолчанию, и сжимать передаваемые данные.


ПРИМЕЧАНИЕ: я очень, очень далек от эксперта по этому вопросу. Приведенная выше команда - это то, что я использую после нахождения ее в сообщении в блоге, и я заметил огромное улучшение в скорости. Я уверен, что различные комментаторы ниже знают, о чем они говорят, и что эти шифровальные шифры могут быть не самыми лучшими. Вполне вероятно, что единственный бит этого ответа, который действительно актуален, - это использование -Cпереключателя для сжатия передаваемых данных.


11
На самом деле, изменяя параметры шифрования, вы можете улучшить пропускную способность соединения, но это почти не повлияет на задержку, из-за чего соединение X-over-ssh становится таким медленным ... Или иначе: вы можете достичь передачи файл быстрее, но время, необходимое для начала передачи, не изменится (почти). Это проблема X-протокола, он включает в себя множество сообщений и подтверждений между клиентом и сервером, поэтому через Интернет задержка в несколько миллисекунд увеличивается многократно, пока вы не увидите, например, кнопку, изменяющую ее состояние.
Ариэль

8
Действительно ли -4(IPv4) здесь уместно?
Cornstalks

6
Шифр «arcfour» устарел, кстати.
Восстановить Монику - М. Шредер

5
Сжатие помогает, но не творит чудеса. Firefox очень требователен. Смена шифра вряд ли будет иметь значение, если только одна из сторон не очень сильно ограничена во времени ЦП: с такими высокопроизводительными устройствами, как смартфоны и ПК, время шифрования / дешифрования незначительно по сравнению с задержкой в ​​сети и пропускной способностью.
Жиль "ТАК - перестань быть злым"

6
Предлагаемые шифры - неправильный путь. Как говорит Жиль, у большинства устройств в наши дни не будет никаких проблем со стандартным AES-CTR: он очень быстрый, особенно если на используемом оборудовании установлен набор инструкций AES. RC4 слабый и постепенно сокращается по сети, и Blowfish-CBC не обязательно может быть быстрее, чем AES-CTR в любом случае.
Рейд

32

Одна из самых больших проблем при удаленном запуске некоторого X-клиента - это X-протокол, а не столько ssh! X-протокол требует большого пинг-понга между клиентом и сервером, что абсолютно снижает производительность в случае удаленных приложений.

Попробуйте что-то вроде «x2go» (который также работает с ssh с настройками по умолчанию), и вы заметите, что Firefox «летает» в сравнении!

Несколько дистрибутивов предоставляют пакеты x2go из коробки, например, для тестирования Debian или в Stable-Backports. Но если нет, см. Http://wiki.x2go.org/doku.php/download:start , они предоставляют готовые бинарные пакеты / репозитории для многих дистрибутивов. Вы должны установить x2goclient (на компьютер, на котором вы хотите «использовать» firefox) и x2goserver (на компьютер, на котором должен работать firefox), затем вы можете настроить свои сеансы для отдельных приложений X или для полного просмотра рабочего стола и т. Д. Само соединение происходит через SSH. Это действительно замечательный инструмент :)

Чтобы использовать его, вы запускаете «x2goclient», он запускает графический интерфейс, где вы можете создать новый сеанс: вы указываете dns-имя сервера, порт, данные ssh и т. Д., А затем выбираете «тип сеанса», т. Е. Если вам нужен полностью удаленный рабочий стол KDE или GNOME, например, или просто «отдельное приложение», и вы вводите «firefox».


1
как я могу попробовать x2go? команда
DevOps85

3
В x2goserverDebian (или Ubuntu), похоже, нет пакета. Кроме того, это можно настроить, чтобы разрешить туннелирование? Например, я использую machineX, но могу подключиться к нему только через machineY. Может ли x2go справиться с этим?
Terdon

@terdon ты прав, я проверил только клиента. Но вы можете просто добавить репозиторий x2go (см. Ссылку wiki.x2go.org/doku.php/download:start ), и сервер будет там. Я не знаю, почему только клиент находится в Debian. Туннелирование: наверняка это возможно, но никогда не пробовал. Я ожидаю, что этого будет достаточно, чтобы просто настроить ssh ~/.ssh/configи использовать правильное (туннельное) имя хоста в сеансе x2go.
Ариэль

@terdon: в конфигурации сеанса x2go есть опция «Использовать прокси-сервер для соединения SSH» (ssh / http). Так что это должно сделать свое дело тоже!
Ариэль

Это кажется интересным, я буду играть с этим еще немного. Пока что я могу подтвердить, что настройки туннеля в России .ssh/configнедостаточно. Я настроил его так, чтобы он ssh machineBработал через туннель, machineAно x2go, похоже, этого не видит.
Terdon

17

У меня гораздо лучший опыт использования sshтуннеля для маршрутизации трафика через другую машину. Это очень легко настроить, так как у вас все равно есть доступ по ssh. В терминале на вашем компьютере введите

ssh -vv -ND 8080 user@yourserver

Держите это окно открытым и наблюдайте, как оно доставляет подробные сообщения о данных, проходящих через туннель.

В firefox, выберите Настройки -> Дополнительно -> Сеть -> Подключение: Настройки.

Выберите « Настройка прокси вручную» и добавьте SOCKS v5прокси:

 SOCKS Host:   localhost    Port 8080

Проверьте ваш новый IP, перейдя, например, по адресу http://whatismyipaddress.com/ .

Вы можете использовать дополнение Firefox, например, прокси-сервер foxy, для динамического переключения прокси.


Upvoted, это очень правильная альтернатива использованию сжатия на основе NX (x2go и т. Д.), Гораздо более полезная, чем возиться с настройками шифрования ssh :)
Ariel

Я всегда использовал ssh -L 8080: localhost: 8080, но мне понравилась опция -ND, но я не был уверен, почему вы использовали Dinamic, Remote или Listen. Кстати, использовать прокси-сервер гораздо лучше, чем использовать -X, но я думаю, что лучше использовать VNC, если вам нужно больше программ для X, а не только Firefox.
m3nda

прост в настройке и работает эффективно!
david.perez

2

Firefox работает медленнее SSH, потому что новые сборки Firefox допускают несколько экземпляров. Если у вас проблемы с пропускной способностью, используйте легкий браузер, такой как dillo, и вы даже не заметите скорость соединения.



1
это не имеет никакого отношения к проблеме - проблема не в браузере, а в удаленном протоколе X11
João Antunes

0

Еще одна вещь, которая улучшит ваш просмотр по ssh, - это включить конвейерную обработку в Firefox. Откройте about:configи измените network.http.pipeliningна true.


Эта опция должна ускорить загрузку веб-страниц, но совершенно не связана с тем, что браузер работает по SSH-туннелю или нет. В любом случае, остерегайтесь «но», когда вы касаетесь дополнительных опций ... см. Kb.mozillazine.org/Network.http.pipelining
Ариэль

По моему опыту, просмотр по ssh становится медленным, и конвейерные запросы - большая помощь, так как в противном случае любой данный запрос должен ждать предыдущие, которые могут или не могут быть выполнены своевременно, если вообще будут. Я также комбинирую это с мультиплексированием ssh. Это делает заметную разницу. Отключение конвейерной передачи в моем случае становится невыносимо медленным.
Танат

0

Вы должны экспериментировать, чтобы увидеть, что помогает с вашими конкретными узкими местами.

По моему -Cмнению , сжатие ( ) улучшило отзывчивость от непригодного до просто заметного лага.

Выбор шифра также может оказать влияние, вопреки тому, что говорили некоторые люди. Вы можете найти людей, которые делятся тестами в Интернете, но не предполагайте, что ваши результаты будут такими же. Какой шифр лучше для вас, зависит от аппаратного обеспечения. Для меня мой шифр по умолчанию (chacha20-poly1305@openssh.com) уже был привязан к самому быстрому.

Я написал быстрый сценарий для сравнения соответствующих шифров в несколько реалистичных условиях. Пояснения в комментариях:

#!/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]

Вы можете выбрать тестирование с SSH-соединением, где клиент и хост - это одна и та же машина, или вы можете протестировать в более реалистичном сценарии, где хост - это машина, с которой вы пересылаете X11, что должно быть более полезным, потому что производительность зависит не только от расшифровки производительности клиента, но и от хоста.

Недостатком тестирования на удаленном компьютере может быть шум, если пропускная способность вашего интернет-соединения изменяется в ходе теста. В этом случае может потребоваться увеличить количество тестов каждого шифра.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.