Tôi cố gắng khởi chạy Firefox qua SSH, sử dụng
ssh -X user@hostname
và sau đó
firefox -no-remote
nhưng nó rất rất chậm.
Làm thế nào tôi có thể sửa lỗi này? Có phải là một vấn đề kết nối?
Tôi cố gắng khởi chạy Firefox qua SSH, sử dụng
ssh -X user@hostname
và sau đó
firefox -no-remote
nhưng nó rất rất chậm.
Làm thế nào tôi có thể sửa lỗi này? Có phải là một vấn đề kết nối?
Câu trả lời:
Cài đặt ssh mặc định tạo ra kết nối khá chậm. Thay vào đó hãy thử các cách sau:
ssh -YC4c arcfour,blowfish-cbc user@hostname firefox -no-remote
Các tùy chọn được sử dụng là:
-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.
Điểm chính ở đây là sử dụng một cypher mã hóa khác, trong trường hợp này là arcfour nhanh hơn mặc định và để nén dữ liệu được truyền.
LƯU Ý: Tôi rất, rất xa một chuyên gia về điều này. Lệnh trên là những gì tôi sử dụng sau khi tìm thấy nó trên một bài đăng blog ở đâu đó và tôi đã nhận thấy một sự cải thiện rất lớn về tốc độ. Tôi chắc chắn rằng những người bình luận khác nhau bên dưới biết họ đang nói về điều gì và những người ảo mã hóa này có thể không phải là người giỏi nhất. Rất có khả năng rằng phần duy nhất của câu trả lời này thực sự phù hợp là sử dụng công -C
tắc để nén dữ liệu được truyền.
-4
(IPv4) thực sự liên quan ở đây?
Một trong những vấn đề lớn nhất khi khởi chạy một số máy khách X từ xa là giao thức X, không quá nhiều chi phí ssh! Giao thức X yêu cầu rất nhiều ping-pong'ing giữa máy khách và máy chủ, điều này hoàn toàn giết chết hiệu năng trong trường hợp các ứng dụng từ xa.
Hãy thử một cái gì đó như "x2go" (cũng đi qua ssh với các thiết lập mặc định) trong bạn sẽ nhận thấy rằng firefox "bay" so sánh!
Một số bản phân phối cung cấp các gói x2go ngoài hộp, ví dụ như thử nghiệm Debian hoặc trong Stable-Backports. Nhưng nếu không, hãy xem http://wiki.x2go.org/doku.php/doad:start , họ cung cấp các gói / kho lưu trữ nhị phân dựng sẵn cho nhiều bản phân phối. Bạn nên cài đặt x2goclient (trên máy tính nơi bạn muốn 'sử dụng' firefox) và x2goserver (trong máy tính có chạy firefox), sau đó bạn có thể định cấu hình phiên của mình cho các ứng dụng X đơn cho chế độ xem toàn màn hình, v.v. xảy ra trên ssh. Đó là một công cụ thực sự tuyệt vời :)
Để sử dụng nó, bạn chạy "x2goclient", nó khởi động GUI nơi bạn có thể tạo phiên mới: bạn cung cấp tên dns của máy chủ, cổng, dữ liệu ssh, v.v. và sau đó bạn chọn "loại phiên", nghĩa là, nếu bạn muốn có một máy tính để bàn KDE hoặc Gnome từ xa đầy đủ, hoặc chỉ là một "ứng dụng duy nhất" và ở đó bạn nhập "firefox".
x2goserver
gói nào trên Debian (hoặc Ubuntu). Ngoài ra, điều này có thể được cấu hình để cho phép đường hầm? Ví dụ, tôi sử dụng machineX nhưng tôi chỉ có thể ssh với nó thông qua machineY. X2go có thể đối phó với điều đó?
~/.ssh/config
và sử dụng tên máy chủ (đường hầm) bên phải trong phiên x2go của bạn.
.ssh/config
là không đủ. Tôi đã thiết lập nó để ssh machineB
thực sự chạy qua một đường hầm xuyên qua machineA
nhưng x2go dường như không nhìn thấy nó.
Tôi có nhiều kinh nghiệm hơn trong việc sử dụng một ssh
đường hầm để định tuyến giao thông qua một máy khác. Thật dễ dàng để thiết lập vì dù sao bạn cũng có quyền truy cập ssh. Trong một thiết bị đầu cuối trên máy tính của bạn, gõ
ssh -vv -ND 8080 user@yourserver
Giữ cửa sổ này mở và xem nó cung cấp một số thông điệp dài dòng về dữ liệu chảy qua đường hầm.
Trong firefox
, đi đến Tùy chọn -> Nâng cao -> Mạng -> Kết nối: Cài đặt.
Chọn cấu hình proxy thủ công và thêm SOCKS v5
proxy:
SOCKS Host: localhost Port 8080
Kiểm tra IP mới của bạn bằng cách điều hướng đến ví dụ: http://whatismyipaddress.com/ .
Bạn có thể sử dụng một add-on firefox như foxy proxy để tự động chuyển proxy.
Firefox quá chậm so với SSH vì các bản dựng firefox mới hơn cho phép nhiều trường hợp. Nếu bạn gặp vấn đề về băng thông, hãy sử dụng trình duyệt nhẹ như dillo và bạn thậm chí sẽ không nhận thấy tốc độ kết nối.
Một điều khác sẽ cải thiện trình duyệt của bạn qua ssh là cho phép đường ống trong Firefox. Mở about:configvà thay đổi network.http.pipeliningthành đúng.
Bạn phải thử nghiệm để xem những gì giúp với các tắc nghẽn cụ thể của bạn.
Đối với tôi, cho phép nén ( -C
) cải thiện khả năng phản hồi từ không sử dụng đến độ trễ đáng chú ý.
Lựa chọn mật mã cũng có thể có tác động, trái với những gì một số người nói. Bạn có thể tìm thấy những người chia sẻ điểm chuẩn trực tuyến, nhưng đừng cho rằng kết quả của bạn sẽ giống nhau. Mật mã nào là tốt nhất cho bạn là phụ thuộc vào phần cứng. Đối với tôi mật mã mặc định của tôi (chacha20-poly1305@openssh.com) đã được gắn cho mã nhanh nhất.
Tôi đã viết một kịch bản nhanh để đánh dấu các mật mã có liên quan trong các điều kiện hơi thực tế. Giải thích trong các ý kiến:
#!/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]
Bạn có thể chọn kiểm tra kết nối SSH trong đó máy khách và máy chủ là cùng một máy hoặc bạn có thể kiểm tra trong một kịch bản thực tế hơn, trong đó máy chủ là máy bạn đang thực hiện chuyển tiếp X11, sẽ hữu ích hơn, bởi vì hiệu suất không chỉ phụ thuộc vào giải mã hiệu suất của máy khách mà còn phụ thuộc vào máy chủ.
Thử nghiệm với một máy từ xa có thể có nhược điểm là gây ra tiếng ồn nếu thông lượng kết nối internet của bạn thay đổi trong quá trình chuẩn. Trong trường hợp đó, có thể muốn tăng số lần mỗi mật mã được kiểm tra.