Aktualizacje
- Zawęziłem to do występowania tylko w sieci bezprzewodowej w pracy. Z domu nie doświadczam opóźnień / opóźnień
- Wydaje się również, że po „intensywnym” użyciu SSH i tunelowaniu przez jedną lub dwie maszyny, sieć całkowicie mnie upuszcza i jestem zmuszony ręcznie połączyć się ponownie
- Patrząc na Wireshark przechwytuje z sesji SSH z OpenSSH kontra jsch, wydaje się, że OpenSSH ma kilka
TCP Dup Ack
,TCP Retransmission
iTCP Spurious Retransmission
pakietów. Ale te powinny się załatwić, ponieważ są TCP ..
Problem
Ostatnio, kiedy łączyłem się ze zdalnymi maszynami za pomocą SSH, zauważyłem, że istnieje wyraźne opóźnienie około 1 sekundy między mną, pisząc coś a faktycznie pojawiającymi się postaciami. Jeśli przytrzymam klawisze, pojawią się one w „partiach” około 20 znaków w odstępach ~ 1 sekundy.
Szczegóły systemu
$ ssh -V
OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips 1 Mar 2016
$ echo $ SHELL $ TERMIN $ WYŚWIETLACZ / bin / zsh xterm-256color: 0 $ uname -r; cat / proc / version 4.4.0-22-ogólny Wersja Linux 4.4.0-22-generic (buildd @ lgw01-41) (gcc wersja 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2)) # 40-Ubuntu SMP czw. 12 maja 22:03:46 UTC 2016
Spostrzeżenia
Dziwną obserwacją jest to, że opóźnienie występuje tylko wtedy, gdy nastąpi alokacja pseudo terminala (tj. Domyślna lub opcja -t). Kiedy pseudo terminal jest wymuszony wyłączony, mogę pisać polecenia i otrzymywać ich dane wyjściowe bez opóźnień.
- Mój plik ~ / .ssh / config zawiera tylko „zwykłe wpisy w następującym formacie:
Nazwa gospodarza Nazwa hosta 192.168.1.0 Użytkownik IdentityFile ~ / .ssh / id_rsa
- Nie ma opóźnienia, gdy jawnie wyłączę pseudo terminal (tj. Używając opcji -T)
- Zmiana ustawień wymienionych w podobnych pytaniach nie rozwiązuje problemu
- Np .: Najważniejsze przyczyny powolnego logowania ssh
- Większość znalezionych rozwiązań rozwiązuje problem powolnej reakcji na logowanie. Mój problem występuje po zalogowaniu
- IntelliJ Idea Ultimate Edition może tworzyć połączenia SSH, które nie mają tego problemu. IDE uruchamia klienta Java SSH JSch
- Przekonało mnie to, że jest to problem lokalny i prawdopodobnie nie jest związany z moim interfejsem sieciowym
- Moi współpracownicy w tej samej sieci nie mają tego problemu, chociaż używają Macbooków
Co próbowałem
- Włączanie kompresji, wyłączanie przekazywania X11, różne metody przyspieszenia procesu logowania
- SSH do lokalnego hosta (tutaj nie ma opóźnienia / opóźnienia )
- SSHing do różnych maszyn (tj. Nie tylko jednego) - występuje opóźnienie
- Pobranie najnowszej stabilnej wersji OpenSSH i zbudowanie jej dla mojego systemu
- Świeżo skompilowany plik binarny ma ten sam problem , co prowadzi mnie do wniosku, że jest on spowodowany przez niektóre błędne konfiguracje
- Zapewnienie, że mój plik / etc / ssh / ssh_config wygląda „normalnie”
- Na wszelki wypadek zamieściłem go na końcu wpisu
- Czyszczenie SSH i ponowna instalacja przy użyciu apt-get
- Przechodzę do wirtualnego TTY (myślę, że tak się nazywają ...) za pomocą Ctrl + Alt + F {1-6} i stamtąd SSHing
- Ponowne uruchomienie
- Przełączanie do innej sieci
- Opóźnienie / opóźnienie wydaje się być tylko problemem w sieci w pracy. W domu nie ma zauważalnego opóźnienia / opóźnienia
- Kilka innych rzeczy, o których zapominam
tl; dr
Moje binarne / config / coś SSH wydaje się mieć opóźnienie podczas pisania i próbowałem wielu rzeczy bez powodzenia. Może to coś z bufora postaci? Kto wie! Mam nadzieję, że tak.
ssh -vvv
OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips 1 marca 2016 debug1: odczyt danych konfiguracyjnych /home/redacted/.ssh/config debug1: /home/redacted/.ssh/config wiersz 6: Stosowanie opcji dla ops1 debug1: odczyt danych konfiguracyjnych / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config wiersz 19: Stosowanie opcji dla * debug2: rozwiązanie portu „xx.xx.xx.xx” 22 debug2: ssh_connect_direct: needpriv 0 debug1: Podłączanie do portu xx.xx.xx.xx [xx.xx.xx.xx] 22. debug1: Połączenie ustanowione. debug1: plik tożsamości /home/redacted/.ssh/id_rsa typ 1 debug1: key_load_public: Brak takiego pliku lub katalogu debug1: plik tożsamości /home/redacted/.ssh/id_rsa-cert typ -1 debug1: Włączanie trybu zgodności dla protokołu 2.0 debug1: Ciąg wersji lokalnej SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1 debug1: Zdalny protokół w wersji 2.0, zdalna wersja oprogramowania OpenSSH_5.3 debug1: dopasowanie: OpenSSH_5.3 pat OpenSSH_5 * zgodny 0x0c000000 debug2: fd 3 ustawienie O_NONBLOCK debug1: Uwierzytelnianie w formacie xx.xx.xx.xx: 22 jako „redacted2” debug3: hostkeys_foreach: czytanie pliku „/home/redacted/.ssh/known_hosts” debug3: record_hostkey: znaleziono typ klucza RSA w pliku /home/redacted/.ssh/known_hosts:2 debug3: load_hostkeys: załadowano 1 klucze z xx.xx.xx.xx debug3: order_hostkeyalgs: preferuj hostkeyalgs: ssh-rsa-cert-v01 @ openssh.com, rsa-sha2-512, rsa-sha2-256, ssh-rsa debug3: wyślij pakiet: wpisz 20 debug1: wysłano SSH2_MSG_KEXINIT debug3: odbiera pakiet: typ 20 debug1: odebrano SSH2_MSG_KEXINIT debug2: propozycja KEXINIT klienta lokalnego debug2: Algorytmy KEX: curve25519-sha256 @ libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1 , diffie-hellman-group14-sha1, ext-info-c debug2: algorytmy klucza hosta: ssh-rsa-cert-v01 @ openssh.com, rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256-cert-v01 @ openssh.com, ecdsa- sha2-nistp384-cert-v01 @ openssh.com, ecdsa-sha2-nistp521-cert-v01 @ openssh.com, ssh-ed25519-cert-v01 @ openssh.com, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519 debug2: szyfry ctos: chacha20-poly1305 @ openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm @ openssh.com, aes256-gcm @ openssh.com, aes128-cbc, aes192-cbc, aes256 -cbc, 3des-cbc debug2: ciphers stoc: chacha20-poly1305 @ openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm @ openssh.com, aes256-gcm @ openssh.com, aes128-cbc, aes192-cbc, aes256 -cbc, 3des-cbc debug2: MACs ctos: umac-64-etm @ openssh.com, umac-128-etm @ openssh.com, hmac-sha2-256-etm @ openssh.com, hmac-sha2-512-etm @ openssh.com, hmac -sha1-etm @ openssh.com, umac-64 @ openssh.com, umac-128 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1 debug2: MACs stoc: umac-64-etm @ openssh.com, umac-128-etm @ openssh.com, hmac-sha2-256-etm @ openssh.com, hmac-sha2-512-etm @ openssh.com, hmac -sha1-etm @ openssh.com, umac-64 @ openssh.com, umac-128 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1 debug2: kompresja ctos: brak, zlib @ openssh.com, zlib debug2: kompresja stoc: brak, zlib @ openssh.com, zlib debug2: języki ctos: debug2: języki stoc: debug2: first_kex_follows 0 debug2: zarezerwowany 0 debug2: propozycja KEXINIT serwera równorzędnego debug2: Algorytmy KEX: diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1, diffie-hellman-group14-sha1, diffie-hellman-group1-sha1 debug2: algorytmy klucza hosta: ssh-rsa, ssh-dss debug2: szyfry ctos: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, rc @ lysator.liu.se debug2: ciphers stoc: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbcij, arc @ lysator.liu.se debug2: MACs ctos: hmac-md5, hmac-sha1, umac-64 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-ripemd160, hmac-ripemd160 @ openssh.com, hmac-sha1-96 , hmac-md5-96 debug2: MACs stoc: hmac-md5, hmac-sha1, umac-64 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-ripemd160, hmac-ripemd160 @ openssh.com, hmac-sha1-96 , hmac-md5-96 debug2: kompresja ctos: brak, zlib @ openssh.com debug2: kompresja stoc: brak, zlib @ openssh.com debug2: języki ctos: debug2: języki stoc: debug2: first_kex_follows 0 debug2: zarezerwowany 0 debug1: kex: algorytm: diffie-hellman-group-exchange-sha256 debug1: kex: algorytm klucza hosta: ssh-rsa debug1: kex: server-> szyfr klienta: aes128-ctr MAC: umac-64@openssh.com kompresja: brak debug1: kex: client-> szyfr serwera: aes128-ctr MAC: umac-64@openssh.com kompresja: brak debug3: wyślij pakiet: wpisz 34 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST (2048 zamknięty debug3: odbiera pakiet: typ 96 debug2: channel 0: rcvd eof debug2: kanał 0: wyjście otwarte -> drenaż debug3: odbiera pakiet: typ 97 debug2: kanał 0: zamknij rcvd debug3: kanał 0: nie wyśle danych po zamknięciu Wyloguj debug3: kanał 0: nie wyśle danych po zamknięciu debug2: kanał 0: pusty pusty debug2: kanał 0: zamknij_pisz debug2: kanał 0: odpływ wyjściowy -> zamknięty debug2: kanał 0: prawie nie żyje debug2: kanał 0: gc: powiadom użytkownika debug2: kanał 0: gc: użytkownik odłączony debug2: kanał 0: wyślij zamknij debug3: wyślij pakiet: wpisz 97 debug2: kanał 0: nie działa debug2: kanał 0: odśmiecanie debug1: kanał 0: wolny: sesja klienta, kanały 1 debug3: kanał 0: status: Otwarte są następujące połączenia: # 0 sesja klienta (t4 r0 i3 / 0 o3 / 0 fd -1 / -1 cc -1) debug3: wyślij pakiet: wpisz 1 debug1: fd 1 kasuje O_NONBLOCK debug3: fd 2 nie jest O_NONBLOCK Połączenie z xx.xx.xx.xx zostało zamknięte. Przeniesiono: wysłano 3376, odebrano 3072 bajty w 0,8 sekundy Bajtów na sekundę: wysłano 3911,4, odebrano 3622,9 debug1: Wyjdź ze stanu 0
ssh -vvvT
OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips 1 marca 2016 debug1: odczyt danych konfiguracyjnych /home/redacted/.ssh/config debug1: /home/redacted/.ssh/config wiersz 6: Stosowanie opcji dla ops1 debug1: odczyt danych konfiguracyjnych / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config wiersz 19: Stosowanie opcji dla * debug2: rozwiązanie portu „xx.xx.x.xx” 22 debug2: ssh_connect_direct: needpriv 0 debug1: Podłączanie do portu xx.xx.x.xx [xx.xx.x.xx] 22. debug1: Połączenie ustanowione. debug1: plik tożsamości /home/redacted/.ssh/id_rsa typ 1 debug1: key_load_public: Brak takiego pliku lub katalogu debug1: plik tożsamości /home/redacted/.ssh/id_rsa-cert typ -1 debug1: Włączanie trybu zgodności dla protokołu 2.0 debug1: Ciąg wersji lokalnej SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1 debug1: Zdalny protokół w wersji 2.0, zdalna wersja oprogramowania OpenSSH_5.3 debug1: dopasowanie: OpenSSH_5.3 pat OpenSSH_5 * zgodny 0x0c000000 debug2: fd 3 ustawienie O_NONBLOCK debug1: Uwierzytelnianie w formacie xx.xx.x.xx: 22 jako „zredagowane” debug3: hostkeys_foreach: czytanie pliku „/home/redacted/.ssh/known_hosts” debug3: record_hostkey: znaleziono typ klucza RSA w pliku /home/redacted/.ssh/known_hosts:2 debug3: load_hostkeys: załadowano 1 klucze z xx.xx.x.xx debug3: order_hostkeyalgs: preferuj hostkeyalgs: ssh-rsa-cert-v01 @ openssh.com, rsa-sha2-512, rsa-sha2-256, ssh-rsa debug3: wyślij pakiet: wpisz 20 debug1: wysłano SSH2_MSG_KEXINIT debug3: odbiera pakiet: typ 20 debug1: odebrano SSH2_MSG_KEXINIT debug2: propozycja KEXINIT klienta lokalnego debug2: Algorytmy KEX: curve25519-sha256 @ libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1 , diffie-hellman-group14-sha1, ext-info-c debug2: algorytmy klucza hosta: ssh-rsa-cert-v01 @ openssh.com, rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256-cert-v01 @ openssh.com, ecdsa- sha2-nistp384-cert-v01 @ openssh.com, ecdsa-sha2-nistp521-cert-v01 @ openssh.com, ssh-ed25519-cert-v01 @ openssh.com, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519 debug2: szyfry ctos: chacha20-poly1305 @ openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm @ openssh.com, aes256-gcm @ openssh.com, aes128-cbc, aes192-cbc, aes256 -cbc, 3des-cbc debug2: ciphers stoc: chacha20-poly1305 @ openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm @ openssh.com, aes256-gcm @ openssh.com, aes128-cbc, aes192-cbc, aes256 -cbc, 3des-cbc debug2: MACs ctos: umac-64-etm @ openssh.com, umac-128-etm @ openssh.com, hmac-sha2-256-etm @ openssh.com, hmac-sha2-512-etm @ openssh.com, hmac -sha1-etm @ openssh.com, umac-64 @ openssh.com, umac-128 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1 debug2: MACs stoc: umac-64-etm @ openssh.com, umac-128-etm @ openssh.com, hmac-sha2-256-etm @ openssh.com, hmac-sha2-512-etm @ openssh.com, hmac -sha1-etm @ openssh.com, umac-64 @ openssh.com, umac-128 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1 debug2: kompresja ctos: brak, zlib @ openssh.com, zlib debug2: kompresja stoc: brak, zlib @ openssh.com, zlib debug2: języki ctos: debug2: języki stoc: debug2: first_kex_follows 0 debug2: zarezerwowany 0 debug2: propozycja KEXINIT serwera równorzędnego debug2: Algorytmy KEX: diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1, diffie-hellman-group14-sha1, diffie-hellman-group1-sha1 debug2: algorytmy klucza hosta: ssh-rsa, ssh-dss debug2: szyfry ctos: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, rc @ lysator.liu.se debug2: ciphers stoc: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbcij, arc @ lysator.liu.se debug2: MACs ctos: hmac-md5, hmac-sha1, umac-64 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-ripemd160, hmac-ripemd160 @ openssh.com, hmac-sha1-96 , hmac-md5-96 debug2: MACs stoc: hmac-md5, hmac-sha1, umac-64 @ openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-ripemd160, hmac-ripemd160 @ openssh.com, hmac-sha1-96 , hmac-md5-96 debug2: kompresja ctos: brak, zlib @ openssh.com debug2: kompresja stoc: brak, zlib @ openssh.com debug2: języki ctos: debug2: języki stoc: debug2: first_kex_follows 0 debug2: zarezerwowany 0 debug1: kex: algorytm: diffie-hellman-group-exchange-sha256 debug1: kex: algorytm klucza hosta: ssh-rsa debug1: kex: server-> szyfr klienta: aes128-ctr MAC: umac-64@openssh.com kompresja: brak debug1: kex: client-> szyfr serwera: aes128-ctr MAC: umac-64@openssh.com kompresja: brak debug3: wyślij pakiet: wpisz 34 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST (drenaż 2048 debug2: kanał 0: ibuf pusty debug2: kanał 0: wyślij eof debug3: wyślij pakiet: wpisz 96 debug2: kanał 0: drenaż wejściowy -> zamknięty debug3: odbiera pakiet: typ 98 debug1: client_input_channel_req: kanał 0 typ wyjścia typ odpowiedzi 0 debug3: odbiera pakiet: typ 96 debug2: channel 0: rcvd eof debug2: kanał 0: wyjście otwarte -> drenaż debug2: kanał 0: pusty pusty debug2: kanał 0: zamknij_pisz debug2: kanał 0: odpływ wyjściowy -> zamknięty debug3: odbiera pakiet: typ 97 debug2: kanał 0: zamknij rcvd debug3: kanał 0: nie wyśle danych po zamknięciu debug2: kanał 0: prawie nie żyje debug2: kanał 0: gc: powiadom użytkownika debug2: kanał 0: gc: użytkownik odłączony debug2: kanał 0: wyślij zamknij debug3: wyślij pakiet: wpisz 97 debug2: kanał 0: nie działa debug2: kanał 0: odśmiecanie debug1: kanał 0: wolny: sesja klienta, kanały 1 debug3: kanał 0: status: Otwarte są następujące połączenia: # 0 sesja klienta (t4 r0 i3 / 0 o3 / 0 fd -1 / -1 cc -1) debug3: wyślij pakiet: wpisz 1 debug1: fd 1 kasuje O_NONBLOCK debug3: fd 2 nie jest O_NONBLOCK Przeniesiono: wysłano 3040, odebrano 2800 bajtów w 1,9 sekundy Bajtów na sekundę: wysłano 1588,6, odebrano 1472,4 debug1: Wyjdź ze stanu 0
/ etc / ssh / ssh_config
# To jest plik konfiguracyjny dla całego systemu klienta ssh. Widzieć # ssh_config (5), aby uzyskać więcej informacji. Ten plik zawiera wartości domyślne dla # użytkowników, a wartości można zmienić w plikach konfiguracyjnych dla poszczególnych użytkowników # lub w wierszu poleceń. # Dane konfiguracyjne są analizowane w następujący sposób: # 1. opcje wiersza poleceń # 2. plik specyficzny dla użytkownika # 3. plik systemowy # Każda wartość konfiguracji jest zmieniana tylko przy pierwszym ustawieniu. # Tak więc definicje specyficzne dla hosta powinny znajdować się na początku # plik konfiguracyjny i domyślnie na końcu. # Domyślne ustawienia dla całej witryny dla niektórych często używanych opcji. Dla kompleksowego # lista dostępnych opcji, ich znaczenie i wartości domyślne, zobacz # ssh_config (5) strona man. Gospodarz * # ForwardAgent no # ForwardX11 nr # ForwardX11 Zaufane tak # RhostsRSA Nr uwierzytelnienia # RSA Uwierzytelnienie tak # Hasło Uwierzytelnienie tak # HostbasedAuthentication no # GSSAPIANumer uwierzytelnienia # GSSAPIDelegateCredentials no # GSSAPIKeyExchange tak # GSSAPITrustDNS nr # BatchMode nr # CheckHostIP tak # Adres Rodzina dowolna # ConnectTimeout 0 # StrictHostKeyChecking zapytaj # IdentityFile ~ / .ssh / identity # IdentityFile ~ / .ssh / id_rsa # IdentityFile ~ / .ssh / id_dsa # IdentityFile ~ / .ssh / id_ecdsa # IdentityFile ~ / .ssh / id_ed25519 # Port 22 # Protokół 2 # Szyfrowanie 3des # Szyfry aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc # MACs hmac-md5, hmac-sha1, umac-64 @ openssh.com, hmac-ripemd160 # EscapeChar ~ # Nr tunelu # TunnelDevice any: any # PermitLocalCommand nr # VisualHostKey no # ProxyCommand ssh -q -W% h:% p gateway.example.com # RekeyLimit 1G 1h # SendEnv LANG LC_ * HashKnownHosts tak # GSSAPIA Uwierzytelnienie tak # GSSAPIDelegateCredentials no
ssh
wejść do lokalnego hosta. Jakie były tego rezultaty? To samo opóźnienie? Bez opóźnień?