Firefox가 SSH보다 느린 이유는 무엇입니까?


39

다음을 사용하여 SSH를 통해 Firefox를 시작하려고합니다.

ssh -X user@hostname

그리고

firefox -no-remote

그러나 매우 느립니다.

이 문제를 어떻게 해결할 수 있습니까? 연결 문제입니까?


3
엄청나게 높은 수준의 암호화가 있거나 ssh하고있는 서버의 부하가 높지 않은 한, 아마도 방정식의 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.

여기서 중요한 점은 다른 암호화 암호를 사용하는 것인데,이 경우 기본값보다 빠른 arcfour를 사용하고 전송중인 데이터를 압축합니다.


참고 : 나는 이것에 대해 전문가와 매우 멀리 떨어져 있습니다. 위의 명령은 블로그 게시물에서 찾은 후 사용하는 것으로 속도가 크게 향상되었습니다. 아래의 다양한 의견자가 자신이 말하는 내용을 알고 있으며 이러한 암호화 암호가 최선의 암호가 아닐 수도 있습니다. 이 답변의 유일한 부분은 -C스위치를 사용하여 전송되는 데이터를 압축하는 것일 가능성이 큽니다 .


11
실제로 암호화 설정을 변경하면 연결 처리량 을 향상시킬 수 있지만 대기 시간 에는 거의 영향을 미치지 않으므로 X-over-ssh 연결이 느려집니다 ... 또는 그렇지 않으면 : 전송을 달성 할 수 있습니다 파일이 더 빠르지 만 전송을 시작하는 데 걸리는 시간은 거의 변하지 않습니다. 그것은 X 프로토콜의 문제이며, 클라이언트와 서버 사이에 많은 메시지와 승인이 필요하므로 인터넷을 통해 버튼의 상태가 변경 될 때까지 몇 밀리 초의 대기 시간이 여러 번 곱해집니다.
Ariel

8
-4여기에 정말 관련 (IPv4)를?
Cornstalks

6
`arcfour '암호는 더 이상 사용되지 않습니다.
Reinstate Monica-M. Schröder

5
압축은 도움이되지만 기적을 일으키지는 않습니다. Firefox는 매우 까다 롭습니다. 측면 중 하나가 CPU 시간을 매우 제한하지 않는 한 암호 변경은 차이가 없을 것입니다.
Gilles 'SO- 악한 중지'

6
제안 된 암호는 잘못된 길입니다. Gilles가 말했듯이 요즘 대부분의 장치는 기본 AES-CTR에 전혀 문제가 없습니다. 특히 사용되는 하드웨어에 AES 명령 세트가있는 경우 매우 빠릅니다 . RC4는 약하고 인터넷을 통해 단계적으로 중단되고 있으며, Blowfish-CBC가 반드시 AES-CTR보다 빠를 필요는 없습니다.
리드

32

일부 X- 클라이언트를 원격으로 시작할 때 가장 큰 문제 중 하나는 X- 프로토콜입니다. X 프로토콜은 클라이언트와 서버 사이에 많은 핑퐁이 필요하므로 원격 응용 프로그램의 경우 성능을 절대적으로 저하시킵니다.

"x2go"(기본 설정으로 ssh를 거치는)와 같은 것을 시도해보십시오. 파이어 폭스는 비교할 때 "비행"합니다.

여러 배포판에서 x2go 패키지를 데비안 테스트 또는 Stable-Backport와 같이 기본적으로 제공합니다. 그러나 그렇지 않은 경우 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데비안 (또는 우분투) 에는 패키지 가없는 것 같습니다 . 또한 터널링을 허용하도록 구성 할 수 있습니까? 예를 들어 machineX를 사용하지만 machineY를 통해서만 ssh 할 수 있습니다. x2go가 그걸 다룰 수 있을까요?
terdon

@ terdon 당신이 맞아, 나는 단지 클라이언트를 확인했다. 그러나 x2go 저장소 ( wiki.x2go.org/doku.php/download:start 링크 참조 )를 추가하면 서버가 있습니다. 왜 클라이언트 만 데비안에 있는지 모르겠습니다. 터널링 : 가능하지만 절대 시도하지 마십시오. ssh를 구성 ~/.ssh/config하고 x2go 세션에서 올바른 (터널링 된) 호스트 이름을 사용하는 것으로 충분할 것으로 기대합니다 .
Ariel

@terdon : x2go 세션 구성에 "SSH 연결에 프록시 서버 사용"(ssh / http) 옵션이 있습니다. 그래서 그 트릭도해야합니다!
Ariel

이것은 흥미있는 것 같습니다. 나는 그것을 더 가지고 놀 것입니다. 지금까지 터널 구성이 .ssh/config충분하지 않음을 확인할 수 있습니다. ssh machineB실제로 터널을 통해 실행 되도록 설정 machineA했지만 x2go가 보이지 않습니다.
terdon

17

ssh터널을 사용하여 다른 컴퓨터를 통해 트래픽을 라우팅 하는 데 훨씬 더 나은 경험이 있습니다 . 어쨌든 ssh 액세스 권한이 있기 때문에 설정이 매우 쉽습니다. 컴퓨터의 터미널에 다음을 입력하십시오.

ssh -vv -ND 8080 user@yourserver

이 창을 열어두고 터널을 통해 흐르는 데이터에 대한 자세한 메시지를 전달하는 것을보십시오.

에서 firefox설정> 고급 - - -> 네트워크> 연결, 환경 설정으로 이동합니다.

수동 프록시 구성을 선택 하고 SOCKS v5프록시를 추가하십시오 .

 SOCKS Host:   localhost    Port 8080

예를 들어 http://whatismyipaddress.com/ 으로 이동하여 새 IP를 확인 하십시오 .

foxy 프록시 와 같은 firefox 애드온을 사용하여 프록시 를 동적으로 전환 할 수 있습니다 .


NX 기반 압축 (x2go 등)을 사용하는 매우 효과적인 대안으로, ssh 암호화 설정을 사용하는 것보다 훨씬 유용합니다.
Ariel

나는 항상 ssh -L 8080 : localhost : 8080을 사용했지만 -ND 옵션을 좋아했지만 왜 Dinamic을 대신 사용했는지 또는 Remote 또는 Listen을 사용했는지 모르겠습니다. 그건 그렇고, 프록시를 사용하는 것이 -X를 사용하는 것보다 훨씬 낫지 만 Firefox가 아닌 X 프로그램이 더 필요한 경우 VNC를 사용하는 것이 더 좋습니다.
erm3nda

설치가 쉽고 효율적으로 작동합니다!
david.perez

2

Firefox는 최신 버전의 firefox로 여러 인스턴스를 허용하므로 SSH보다 속도가 느립니다. 대역폭 문제가있는 경우 dillo와 같은 가벼운 브라우저를 사용하면 연결 속도를 느끼지 못할 것입니다.



1
이것은 문제와 관련이 없습니다-문제는 브라우저가 아니라 X11 원격 프로토콜입니다
João Antunes

0

ssh를 통한 탐색을 향상시키는 또 다른 사항은 Firefox에서 파이프 라이닝을 활성화하는 것입니다. 열고 true로 about:config변경하십시오 network.http.pipelining.


이 옵션을 사용하면 웹 페이지를 더 빨리로드 할 수 있지만 브라우저가 SSH 터널을 통해 실행되고 있다는 사실과는 완전히 관련이 없습니다. 어쨌든 고급 옵션을 터치 할 때 "그러나"를 조심하십시오 ... 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.