เหตุใด Firefox จึงช้ากว่า SSH


39

ฉันพยายามเปิด Firefox ผ่าน SSH โดยใช้

ssh -X user@hostname

แล้ว

firefox -no-remote

แต่มันช้ามาก

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร มันเป็นปัญหาการเชื่อมต่อหรือไม่?


3
ถ้าคุณไม่มีการเข้ารหัสระดับสูงอย่างไม่น่าเชื่อหรือเซิร์ฟเวอร์ที่คุณกำลังโหลดมีภาระสูงมันอาจไม่ใช่ส่วนของ ssh ของสมการ มักเป็นปัญหาเกี่ยวกับแบนด์วิดท์และ / หรือความล่าช้า
Bratchley

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.

จุดหลักที่นี่คือการใช้การเข้ารหัส cypher ที่แตกต่างกันในกรณีนี้ arcfour ซึ่งเร็วกว่าค่าเริ่มต้นและบีบอัดข้อมูลที่ถูกถ่ายโอน


หมายเหตุ: ฉันอยู่ไกลมากจากผู้เชี่ยวชาญในเรื่องนี้ คำสั่งข้างต้นคือสิ่งที่ฉันใช้หลังจากค้นหามันในโพสต์บล็อกที่ไหนสักแห่งและฉันสังเกตเห็นว่าการปรับปรุงความเร็วสูงขึ้นอย่างมาก ฉันแน่ใจว่าผู้แสดงความคิดเห็นหลายคนด้านล่างรู้ว่าพวกเขากำลังพูดถึงและผู้เข้ารหัสไซเบอร์เหล่านี้อาจไม่ใช่คนที่ดีที่สุด เป็นไปได้มากว่าคำตอบเพียงเล็กน้อยเท่านั้นที่เกี่ยวข้องอย่างแท้จริงนี้คือการใช้-Cสวิตช์เพื่อบีบอัดข้อมูลที่กำลังถ่ายโอน


11
ที่จริงแล้วด้วยการเปลี่ยนการตั้งค่าการเข้ารหัสคุณสามารถปรับปรุงทรูพุตของการเชื่อมต่อได้ แต่มันแทบจะไม่มีผลต่อเวลาในการตอบสนองซึ่งเป็นสิ่งที่ทำให้การเชื่อมต่อ X-over-ssh ช้ามาก ... หรือพูดอย่างอื่น: ไฟล์เร็วขึ้น แต่เวลาที่ใช้ในการเริ่มถ่ายโอนจะไม่เปลี่ยนแปลง (เกือบ) นั่นเป็นปัญหาของโปรโตคอล X มันเกี่ยวข้องกับข้อความจำนวนมากและการตอบรับระหว่างไคลเอนต์และเซิร์ฟเวอร์ดังนั้นทางอินเทอร์เน็ตเวลาไม่กี่มิลลิวินาทีเวลาแฝงจะทวีคูณหลายครั้งจนกว่าคุณจะเห็นปุ่มเปลี่ยนสถานะเป็นตัวอย่าง
Ariel

8
คือ-4(IPv4) จริงๆที่เกี่ยวข้องที่นี่?
Cornstalks

6
ตัวเลข `arcfour" เลิกใช้แล้ว btw
Reinstate Monica - M. Schröder

5
การบีบอัดช่วยได้ แต่ไม่ได้ผลอย่างมหัศจรรย์ Firefox ต้องการมาก การเปลี่ยนรหัสไม่น่าจะสร้างความแตกต่างได้เว้นแต่ว่าด้านใดด้านหนึ่งมีข้อ จำกัด อย่างมากในเวลา CPU: ด้วยอุปกรณ์ระดับสูงเช่นสมาร์ทโฟนและพีซีเวลาเข้ารหัส / ถอดรหัสจะน้อยมากเมื่อเทียบกับเวลาแฝงของเครือข่ายและแบนด์วิดท์
Gilles 'SO- หยุดความชั่วร้าย'

6
ยันต์ที่แนะนำนั้นเป็นวิธีที่ผิดไป ดังที่ Gilles กล่าวว่าอุปกรณ์ส่วนใหญ่ในทุกวันนี้จะไม่มีปัญหาอะไรเลยเมื่อใช้ AES-CTR ที่เป็นค่าเริ่มต้น: มันเร็วมากโดยเฉพาะถ้าฮาร์ดแวร์ที่ใช้มีชุดคำสั่ง AES RC4 นั้นอ่อนแอและถูกแบ่งออกไปทั่วเน็ตและ Blowfish-CBC อาจไม่จำเป็นต้องเร็วกว่า AES-CTR
Reid

32

หนึ่งในปัญหาที่ใหญ่ที่สุดเมื่อเปิดตัวไคลเอนต์ X ระยะไกลคือโปรโตคอล X, ค่าโสหุ้ยไม่มาก! โพรโทคอล X ต้องใช้ ping-pong'ing จำนวนมากระหว่างไคลเอนต์และเซิร์ฟเวอร์ซึ่งฆ่าประสิทธิภาพในกรณีของแอปพลิเคชันระยะไกล

ลองบางอย่างเช่น "x2go" (ซึ่งผ่านการตั้งค่าเริ่มต้นด้วย ssh) คุณจะสังเกตเห็นว่า firefox "flies" เปรียบเทียบกัน!

ดิสทริบิวชันหลายตัวมอบแพ็คเกจ x2go นอกกรอบเช่นการทดสอบ Debian หรือใน Stable-Backports แต่ถ้าไม่ใช่ให้ดูที่http://wiki.x2go.org/doku.php/download:startพวกเขามีแพ็คเกจ / ที่เก็บไบนารีล่วงหน้าที่สร้างไว้ล่วงหน้าสำหรับการแจกแจงจำนวนมาก คุณควรติดตั้ง x2goclient (บนคอมพิวเตอร์ที่คุณต้องการ 'ใช้' firefox) และ x2goserver (ในคอมพิวเตอร์ที่ firefox ควรทำงาน) คุณสามารถกำหนดค่าเซสชันของคุณสำหรับแอปพลิเคชั่น X เดียวสำหรับมุมมองเดสก์ทอปเต็มรูปแบบเป็นต้น เกิดขึ้นมากกว่า ssh มันเป็นเครื่องมือที่ยอดเยี่ยมจริงๆ :)

หากต้องการใช้งานคุณเรียกใช้ "x2goclient" ซึ่งจะเริ่ม GUI ซึ่งคุณสามารถสร้างเซสชันใหม่: คุณระบุชื่อ dns ของเซิร์ฟเวอร์พอร์ตข้อมูล ssh และจากนั้นคุณเลือก "ประเภทเซสชัน" เช่นถ้า คุณต้องการอินสแตนซ์ KDE หรือเดสก์ท็อประยะไกลเต็มรูปแบบหรือเพียงแค่ "แอปพลิเคชันเดียว" จากนั้นคุณก็ใส่ "firefox"


1
ฉันจะลอง x2go ได้อย่างไร? คำสั่ง
DevOps85

3
ดูเหมือนจะไม่มีx2goserverแพ็คเกจบน Debian (หรือ Ubuntu) นอกจากนี้ยังสามารถกำหนดค่าให้อนุญาตการสร้างอุโมงค์ได้หรือไม่ ตัวอย่างเช่นฉันใช้ machineX แต่ฉันสามารถใช้ ssh ผ่าน machineY เท่านั้น x2go จัดการกับมันได้ไหม?
terdon

@terdon คุณพูดถูกฉันตรวจสอบแค่ลูกค้า แต่คุณสามารถเพิ่มที่เก็บ x2go ได้ (ดูลิงค์wiki.x2go.org/doku.php/download:start ) และเซิร์ฟเวอร์อยู่ที่นั่น ฉันไม่รู้ว่าทำไมลูกค้าเท่านั้นที่อยู่ใน Debian อุโมงค์: แน่นอนมันเป็นไปได้ แต่ไม่เคยลอง ฉันคาดว่ามันควรจะเพียงพอที่จะกำหนดค่า ssh ~/.ssh/configและใช้ชื่อโฮสต์ (tunneled) ที่ถูกต้องในเซสชัน x2go ของคุณ
Ariel

@terdon: มีตัวเลือก "ใช้พร็อกซีเซิร์ฟเวอร์สำหรับการเชื่อมต่อ SSH" (ssh / http) ในการกำหนดค่าเซสชัน x2go ดังนั้นควรทำเคล็ดลับด้วย!
Ariel

ดูเหมือนว่าน่าสนใจฉันจะเล่นกับมันอีก จนถึงตอนนี้ฉันสามารถยืนยันได้ว่าการกำหนดค่าอุโมงค์.ssh/configไม่เพียงพอ ฉันมีการตั้งค่าเพื่อให้ssh machineBทำงานผ่านอุโมงค์จริง ๆmachineAแต่ x2go ดูเหมือนจะไม่เห็น
terdon

17

ฉันมีประสบการณ์ที่ดีกว่ามากในการใช้sshอุโมงค์เพื่อกำหนดเส้นทางการจราจรผ่านเครื่องอื่น ตั้งค่าได้ง่ายมากเนื่องจากคุณสามารถเข้าถึง ssh ได้ ในเทอร์มินัลบนคอมพิวเตอร์ของคุณพิมพ์

ssh -vv -ND 8080 user@yourserver

เปิดหน้าต่างนี้ค้างไว้และเฝ้าดูส่งข้อความ verbose เกี่ยวกับข้อมูลที่ไหลผ่านอุโมงค์

ในfirefoxไปที่การตั้งค่า -> ขั้นสูง -> เครือข่าย -> การเชื่อมต่อ: การตั้งค่า

เลือกการกำหนดค่าพร็อกซีด้วยตนเองและเพิ่มSOCKS v5พร็อกซี:

 SOCKS Host:   localhost    Port 8080

ตรวจสอบ IP ของคุณใหม่โดยการนำไปเช่นhttp://whatismyipaddress.com/

คุณสามารถใช้ firefox add-on เช่นfoxy proxyเพื่อเปลี่ยนพร็อกซีแบบไดนามิก


upvoted นี้เป็นทางเลือกที่ถูกต้องมากที่จะใช้การบีบอัด NX-based (x2go ฯลฯ ) ที่มีประโยชน์มากขึ้นกว่าการเล่นซอกับการตั้งค่าการเข้ารหัส SSH :)
แอเรียล

ฉันใช้ ssh -L 8080 เสมอ: localhost: 8080 แต่ชอบตัวเลือก -ND แต่ไม่แน่ใจว่าทำไมคุณถึงใช้ Dinamic แทนหรือ Remote หรือ Listen อย่างไรก็ตามการใช้พรอกซีนั้นดีกว่าการใช้ -X แต่ฉันคิดว่าวิธีที่ดีกว่าคือการใช้ VNC หากคุณต้องการโปรแกรม X เพิ่มเติมและไม่ใช่แค่ Firefox
erm3nda

ติดตั้งง่ายและทำงานอย่างมีประสิทธิภาพ!
david.perez

2

Firefox ช้ากว่า SSH เพราะการสร้าง Firefox ใหม่อนุญาตให้มีหลายอินสแตนซ์หากคุณมีปัญหาเกี่ยวกับแบนด์วิดท์ให้ใช้เบราว์เซอร์ที่มีน้ำหนักเบาเช่น dillo และคุณจะไม่สังเกตเห็นความเร็วการเชื่อมต่อ


คำตอบนี้เป็นจากโพสต์ในฟอรั่ม ArchLinux
Andrew T.

1
สิ่งนี้ไม่มีส่วนเกี่ยวข้องกับปัญหา - ปัญหาไม่ใช่เบราว์เซอร์ แต่เป็นโปรโตคอลระยะไกล X11
João Antunes

0

อีกสิ่งหนึ่งที่จะปรับปรุงการเรียกดูของคุณผ่าน ssh ก็คือการเปิดใช้ pipelining ใน Firefox เปิดabout:configและเปลี่ยนnetwork.http.pipeliningเป็นจริง


ตัวเลือกนั้นควรทำให้การโหลดหน้าเว็บเร็วขึ้น แต่ไม่เกี่ยวข้องกับข้อเท็จจริงที่ว่าเบราว์เซอร์นั้นทำงานบนอุโมงค์ SSH หรือไม่ อย่างไรก็ตามระวัง "but's" เมื่อคุณแตะตัวเลือกขั้นสูง ... ดูkb.mozillazine.org/Network.http.pipelining
Ariel

จากประสบการณ์ของฉันในการเรียกดู SSH ทำให้ช้าลงและการส่งคำขอเป็นเรื่องใหญ่เพราะมิฉะนั้นคำขอใด ๆ ที่ได้รับจะต้องรอคำขอก่อนหน้าซึ่งอาจจะหรืออาจจะไม่เสร็จในเวลาที่เหมาะสมหากเลย ฉันยังรวมสิ่งนี้กับ ssh multiplexing มันสร้างความแตกต่างที่เห็นได้ชัดเจน การปิดการวางท่อจะย้อนกลับไปช้าในกรณีของฉัน
Tanath

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 ซึ่งน่าจะมีประโยชน์มากกว่า เพราะประสิทธิภาพไม่เพียง แต่ขึ้นอยู่กับประสิทธิภาพในการถอดรหัสของลูกค้า แต่ยังขึ้นกับโฮสต์ด้วย

การทดสอบด้วยเครื่องระยะไกลอาจทำให้เกิดเสียงรบกวนหากการรับส่งข้อมูลของการเชื่อมต่ออินเทอร์เน็ตของคุณเปลี่ยนแปลงไปตามเกณฑ์มาตรฐาน ในกรณีนั้นอาจต้องการเพิ่มจำนวนครั้งในการทดสอบตัวเลขแต่ละตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.