web-dev-qa-db-fra.com

Pourquoi Firefox est-il si lent sur SSH?

J'essaie de lancer Firefox sur SSH, en utilisant

ssh -X user@hostname

et alors

firefox -no-remote

mais c'est très très lent.

Comment puis-je réparer cela? Est-ce un problème de connexion?

40
DevOps85

Les paramètres ssh par défaut permettent une connexion assez lente. Essayez plutôt ce qui suit:

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

Les options utilisées sont:

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

Le point principal ici est d'utiliser un cryptage de cryptage différent, dans ce cas arcfour qui est plus rapide que celui par défaut, et de compresser les données transférées.


NOTE: Je suis très, très loin d'être un expert en la matière. La commande ci-dessus est ce que j'utilise après l'avoir trouvée quelque part sur un blog et j'ai remarqué une énorme amélioration de la vitesse. Je suis sûr que les différents commentateurs ci-dessous savent de quoi ils parlent et que ces cyphers de cryptage ne sont peut-être pas les meilleurs. Il est très probable que la seule partie de cette réponse qui soit vraiment pertinente utilise le -C commutateur pour compresser les données en cours de transfert.

25
terdon

L'un des plus gros problèmes lors du lancement à distance de certains clients X est le protocole X, pas tellement la surcharge ssh! Le protocole X nécessite beaucoup de ping-pong entre le client et le serveur, ce qui tue absolument les performances dans le cas d'applications distantes.

Essayez quelque chose comme "x2go" (qui passe également par ssh avec les configurations par défaut), vous remarquerez que firefox "vole" en comparaison!

Plusieurs distributions fournissent les packages x2go prêts à l'emploi, par exemple les tests Debian, ou dans Stable-Backports. Sinon, voir http://wiki.x2go.org/doku.php/download:start , ils fournissent des packages/référentiels binaires préconstruits pour de nombreuses distributions. Vous devez installer x2goclient (sur l'ordinateur où vous souhaitez `` utiliser '' firefox) et x2goserver (sur l'ordinateur où firefox devrait être exécuté), vous pouvez ensuite configurer vos sessions pour des applications X uniques ou pour des vues de bureau complètes, etc. La connexion elle-même se produit sur ssh. C'est un outil vraiment merveilleux :)

Pour l'utiliser, vous exécutez "x2goclient", il démarre une interface graphique où vous pouvez créer une nouvelle session: vous fournissez le nom DNS du serveur, le port, les données ssh, etc., puis vous sélectionnez le "type de session", c'est-à-dire si vous voulez un bureau KDE ou GNOME à distance complet par exemple, ou juste une "application unique" et là vous entrez "firefox".

34
Ariel

J'ai une bien meilleure expérience de l'utilisation d'un tunnel ssh pour acheminer le trafic via une autre machine. C'est très facile à configurer car vous avez quand même accès à ssh. Dans un terminal de votre ordinateur, saisissez

ssh -vv -ND 8080 user@yourserver

Gardez cette fenêtre ouverte et regardez-la livrer des messages verbeux sur les données circulant dans le tunnel.

Dans firefox, accédez à Préférences -> Avancé -> Réseau -> Connexion: Paramètres.

Sélectionnez Configuration manuelle du proxy et ajoutez un SOCKS v5 Procuration:

 SOCKS Host:   localhost    Port 8080

Vérifiez votre nouvelle adresse IP en accédant par exemple à http://whatismyipaddress.com/ .

Vous pouvez utiliser un module complémentaire Firefox comme proxy foxy pour changer dynamiquement de proxy.

17
Sebastian

Firefox est si lent sur SSH car les nouvelles versions de firefox autorisent plusieurs instances.Si vous avez des problèmes de bande passante, utilisez un navigateur léger comme dillo et vous ne remarquerez même pas la vitesse de connexion.

2
Florence Taylor

Je sais que ce message est super ancien, mais cela m'a aidé à surmonter Firefox par rapport à la lenteur de SSH en définissant ce qui suit dans about:config

gfx.xrender.enabled = true

Remarque: À partir de Firefox 47, la valeur par défaut est devenue False.

1
Eric McAlvin

Vous devez expérimenter pour voir ce qui aide avec vos goulots d'étranglement spécifiques.

Pour moi, l'activation de la compression (-C) amélioration de la réactivité, passant d'un retard inutilisable à un retard tout juste perceptible.

Le choix du chiffre peut également avoir un impact, contrairement à ce que certains ont dit. Vous pouvez trouver des personnes partageant des repères en ligne, mais ne présumez pas que vos résultats seront les mêmes. Le chiffrement qui vous convient le mieux dépend du matériel. Pour moi, mon chiffre par défaut ([email protected]) était déjà lié pour le plus rapide.

J'ai écrit un script rapide pour comparer les chiffres pertinents dans des conditions quelque peu réalistes. Explications dans les commentaires:

#!/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 [email protected] [email protected] [email protected]"

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: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
# 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]

Vous pouvez choisir de tester avec une connexion SSH où le client et l'hôte sont la même machine, ou vous pouvez tester dans un scénario plus réaliste, où l'hôte est la machine à partir de laquelle vous effectuez le transfert X11, ce qui devrait être plus utile, car les performances dépendent non seulement du déchiffrement des performances du client, mais aussi de celles de l'hôte.

Les tests avec une machine distante peuvent présenter l'inconvénient d'introduire du bruit si le débit de votre connexion Internet change au cours du benchmark. Dans ce cas, vous souhaiterez peut-être augmenter le nombre de fois que chaque chiffre est testé.

0

Une autre chose qui améliorera votre navigation sur ssh est d'activer le pipelining dans Firefox. Ouvert about:config et changer network.http.pipelining à vrai.

0
Tanath