Чому 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.

Основний момент тут - використовувати інший шифрувальний шифр, в даному випадку дугу, яка швидша за замовчуванням, і стискати дані, що передаються.


ПРИМІТКА: Я дуже, дуже далекий від експерта з цього питання. Наведена вище команда - це те, що я використовую, коли десь знаходжу це повідомлення в блозі, і я помітив величезне покращення швидкості. Я впевнений, що різні коментатори нижче знають, про що вони говорять, і що ці шифри для шифрування можуть бути не найкращими. Цілком імовірно, що єдиний біт цієї відповіді, який є справді актуальним, - це використання -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-протокол, а не стільки накладні витрати! 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
Здається, що x2goserverна Debian (або Ubuntu) немає пакету. Також, чи можна це налаштувати, щоб дозволити тунелювання? Наприклад, я використовую machineX, але я можу до неї тільки ssh через machineY. Чи міг x2go з цим впоратися?
тердон

@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, схоже, не бачить цього.
тердон

17

Я маю набагато кращий досвід використання sshтунелю для маршрутизації руху через іншу машину. Це дуже просто налаштувати, оскільки у вас в будь-якому випадку є доступ до ssh. Введіть термінал на комп’ютері

ssh -vv -ND 8080 user@yourserver

Тримайте це вікно відкритим і стежте за тим, як воно передає кілька багатослівних повідомлень про дані, що проходять через тунель.

У firefoxвікні Налаштування -> Додатково -> Мережа -> З'єднання: Налаштування.

Виберіть Ручна конфігурація проксі та додайте SOCKS v5проксі:

 SOCKS Host:   localhost    Port 8080

Перевірте свій новий IP-адрес, перейшовши на сторінку http://whatismyipaddress.com/ .

Ви можете використовувати додатки Firefox, як фоксі-проксі, щоб динамічно перемикати проксі.


Оновлено, це дуже вагома альтернатива використанню компресії на основі NX (x2go і т. Д.), Набагато корисніша за те, щоб замінити налаштування шифрування ssh :)
Аріель,

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

простий у налаштуванні та працює ефективно!
david.perez

2

Firefox настільки повільний через SSH, оскільки новіші версії Firefox дозволяють отримати кілька випадків. Якщо у вас є проблеми з пропускною здатністю, використовуйте легкий браузер, як dillo, і ви навіть не помітите швидкість з'єднання.



1
це не має нічого спільного з проблемою - проблема не в браузері, а в віддаленому протоколі X11
Жоан Антунес,

0

Ще одна річ, яка покращить ваш перегляд через ssh, - це включити конвеєрні роботи у Firefox. Відкрийте about:configта перейдіть network.http.pipeliningдо істинного.


Цей варіант повинен прискорити завантаження веб-сторінок, але абсолютно не пов'язаний з тим, що браузер працює над тунелем 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.