更新

更新

更新

  • 我已经将其缩小到仅发生在工作场所的无线网络上。在家里,我没有遇到任何延迟
  • 似乎在“大量”使用 SSH 并通过一台或两台机器建立隧道后,网络会完全断开,我不得不手动重新连接
  • 通过查看 WireShark 捕获的 OpenSSH 与 JSch 的 SSH 会话,似乎 OpenSSH 有一些TCP Dup AckTCP RetransmissionTCP Spurious Retransmission数据包。但这些应该可以自行解决,因为它们是 TCP。

问题

最近,当我使用 SSH 连接到远程计算机时,我注意到有一个明显延迟从我输入内容到字符实际出现大约需要 1 秒的时间。如果我按住按键,它们会以大约 20 个字符的“批次”以约 1 秒的间隔出现。

系统详细信息

$ ssh -V
    OpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips  1 Mar 2016        
$ 回显 $SHELL $TERM $DISPLAY
    /bin/zsh xterm-256色 :0
$ uname -r; cat /proc/version
    4.4.0-22-通用
    Linux 版本 4.4.0-22-generic (buildd@lgw01-41) (gcc 版本 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP 2016 年 5 月 12 日星期四 22:03:46 UTC

观察结果

一个奇怪的现象是,只有当分配伪终端时才会出现延迟(即默认或 -t 选项)。当强制禁用伪终端时,我可以输入命令并立即获得其输出。

  • 我的 ~/.ssh/config 文件仅包含“以下格式的纯文本条目:
主机名称
    主机名 192.168.1.0
    用户 someuser
    身份文件 ~/.ssh/id_rsa
  • 没有延迟当我明确禁用伪终端(即使用 -T 选项)时
  • 更改类似问题中提到的设置并不能解决问题
  • IntelliJ Idea Ultimate Edition 可以创建 SSH 连接,不要有此问题。IDE 正在运行 Java SSH 客户端学士
    • 这让我确信这是一个本地问题,可能与我的网络接口无关
  • 同一网络上的同事没有遇到此问题,尽管他们使用的是 Macbook

我尝试过的方法

  • 启用压缩、禁用 X11 转发、加速登录过程的各种方法
  • 通过 SSH 连接到本地主机 (这里没有滞后/延迟
  • 通过 SSH 连接到多台机器(不只是一台)——存在延迟
  • 下载最新稳定版 OpenSSH 并为我的系统构建它
    • 刚刚编译的二进制文件有同样的问题,这让我认为这是由一些不稳定的配置引起的
  • 确保我的 /etc/ssh/ssh_config 看起来“正常”
    • 我把它放在了文章的最后,以防万一
  • 清除 SSH 并使用 apt-get 重新安装
  • 使用 Ctrl + Alt + F{1-6} 进入虚拟 TTY(我想这就是他们的名字......)并从那里进行 SSHing
  • 重启
  • 切换到其他网络
    • 延迟似乎只在工作网络上才会出现。在家里,没有明显的延迟
  • 我忘记的一些其他内容

总结

我的 SSH 二进制文件/配置/某些东西在输入时似乎有延迟,我尝试了很多方法,但都没有成功。也许是字符缓冲区的问题?谁知道呢!希望你知道。

SSH-VVV

OpenSSH_7.2p2 Ubuntu-4ubuntu1,OpenSSL 1.0.2g-fips 2016 年 3 月 1 日
debug1:读取配置数据/home/redacted/.ssh/config
debug1:/home/redacted/.ssh/config 第 6 行:应用 ops1 的选项
debug1:读取配置数据 /etc/ssh/ssh_config
debug1:/etc/ssh/ssh_config 第 19 行:应用选项 *
debug2: 解析“xx.xx.xx.xx”端口 22
调试2:ssh_connect_direct:需要特权 0
debug1:连接到 xx.xx.xx.xx [xx.xx.xx.xx] 端口 22。
debug1:连接已建立。
debug1:身份文件/home/redacted/.ssh/id_rsa 类型 1
debug1:key_load_public:没有此文件或目录
debug1:身份文件/home/redacted/.ssh/id_rsa-cert 类型 -1
debug1:启用协议 2.0 的兼容模式
debug1:本地版本字符串 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.3
调试1:匹配:OpenSSH_5.3 pat OpenSSH_5* 兼容 0x0c000000
debug2:fd 3 设置 O_NONBLOCK
debug1:以“redacted2”身份向 xx.xx.xx.xx:22 进行身份验证
debug3:hostkeys_foreach:读取文件“/home/redacted/.ssh/known_hosts”
debug3:record_hostkey:在文件 /home/redacted/.ssh/known_hosts:2 中找到密钥类型 RSA
debug3:load_hostkeys:从 xx.xx.xx.xx 加载了 1 个密钥
debug3: order_hostkeyalgs: 首选 hostkeyalgs:[电子邮件保护],rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug3:发送数据包:类型20
debug1:SSH2_MSG_KEXINIT 已发送
debug3:接收数据包:类型20
debug1: 收到 SSH2_MSG_KEXINIT
debug2:本地客户端KEXINIT提案
debug2:KEX 算法:[电子邮件保护],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:主机密钥算法:[电子邮件保护],rsa-sha2-512,rsa-sha2-256,ssh-rsa,[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519
调试2:密码ctos:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护][电子邮件保护],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2:密码存储:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护][电子邮件保护],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
调试2:MACs ctos:[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2:MAC 库存:[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2:压缩ctos:无,[电子邮件保护],zlib
debug2:压缩库存:无,[电子邮件保护],zlib
debug2:语言ctos:
debug2:语言库存:
调试2:first_kex_follows 0
调试2:保留0
debug2:对等服务器 KEXINIT 提议
debug2:KEX 算法:diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1、diffie-hellman-group14-sha1、diffie-hellman-group1-sha1
debug2:主机密钥算法:ssh-rsa,ssh-dss
debug2:密码ctos:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
debug2:密码存储:aes128-ctr、aes192-ctr、aes256-ctr、arcfour256、arcfour128、aes128-cbc、3des-cbc、blowfish-cbc、cast128-cbc、aes192-cbc、aes256-cbc、arcfour,[电子邮件保护]
调试2:MAC ctos:hmac-md5,hmac-sha1,[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:MAC 存储:hmac-md5、hmac-sha1,[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
debug2:压缩ctos:无,[电子邮件保护]
debug2:压缩库存:无,[电子邮件保护]
debug2:语言ctos:
debug2:语言库存:
调试2:first_kex_follows 0
调试2:保留0
debug1:kex:算法:diffie-hellman-group-exchange-sha256
debug1:kex:主机密钥算法:ssh-rsa
debug1:kex:服务器->客户端密码:aes128-ctr MAC:[电子邮件保护]压缩:无
debug1:kex:客户端->服务器密码:aes128-ctr MAC:[电子邮件保护]压缩:无
debug3:发送数据包:类型34
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(2048关闭
debug3:接收数据包:类型96
debug2: 通道 0: rcvd eof
调试2:通道0:输出开路->漏极
debug3:接收数据包:类型97
debug2:通道 0:rcvd 关闭
debug3:通道0:关闭后不会发送数据
登出
debug3:通道0:关闭后不会发送数据
debug2:通道 0:obuf 为空
调试2:通道0:close_write
debug2:通道 0:输出漏极 -> 关闭
debug2:通道 0:几乎死机
debug2:通道 0:gc:通知用户
debug2:通道 0:gc:用户已分离
debug2:通道0:发送关闭
debug3:发送数据包:类型97
debug2:通道 0:已死
debug2:通道 0:垃圾收集
debug1:通道 0:空闲:客户端会话,nchannels 1
debug3:通道 0:状态:以下连接已打开:
  #0 客户端会话(t4 r0 i3/0 o3/0 fd -1/-1 cc -1)

debug3:发送数据包:类型1
debug1:fd 1 清除 O_NONBLOCK
debug3:fd 2 不是 O_NONBLOCK
与 xx.xx.xx.xx 的连接已关闭。
已传输:发送 3376 个字节,接收 3072 个字节,耗时 0.8 秒
每秒字节数:发送 3981.4,接收 3622.9
debug1:退出状态0

ssh-vvvT

OpenSSH_7.2p2 Ubuntu-4ubuntu1,OpenSSL 1.0.2g-fips 2016 年 3 月 1 日
debug1:读取配置数据/home/redacted/.ssh/config
debug1:/home/redacted/.ssh/config 第 6 行:应用 ops1 的选项
debug1:读取配置数据 /etc/ssh/ssh_config
debug1:/etc/ssh/ssh_config 第 19 行:应用选项 *
debug2:解析“xx.xx.x.xx”端口 22
调试2:ssh_connect_direct:需要特权 0
debug1:连接到 xx.xx.x.xx [xx.xx.x.xx] 端口 22。
debug1:连接已建立。
debug1:身份文件/home/redacted/.ssh/id_rsa 类型 1
debug1:key_load_public:没有此文件或目录
debug1:身份文件/home/redacted/.ssh/id_rsa-cert 类型 -1
debug1:启用协议 2.0 的兼容模式
debug1:本地版本字符串 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.3
调试1:匹配:OpenSSH_5.3 pat OpenSSH_5* 兼容 0x0c000000
debug2:fd 3 设置 O_NONBLOCK
debug1:以“已删除”身份向 xx.xx.x.xx:22 进行身份验证
debug3:hostkeys_foreach:读取文件“/home/redacted/.ssh/known_hosts”
debug3:record_hostkey:在文件 /home/redacted/.ssh/known_hosts:2 中找到密钥类型 RSA
debug3:load_hostkeys:从 xx.xx.x.xx 加载了 1 个密钥
debug3: order_hostkeyalgs: 首选 hostkeyalgs:[电子邮件保护],rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug3:发送数据包:类型20
debug1:SSH2_MSG_KEXINIT 已发送
debug3:接收数据包:类型20
debug1: 收到 SSH2_MSG_KEXINIT
debug2:本地客户端KEXINIT提案
debug2:KEX 算法:[电子邮件保护],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:主机密钥算法:[电子邮件保护],rsa-sha2-512,rsa-sha2-256,ssh-rsa,[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519
调试2:密码ctos:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护][电子邮件保护],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2:密码存储:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护][电子邮件保护],aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
调试2:MACs ctos:[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2:MAC 库存:[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2:压缩ctos:无,[电子邮件保护],zlib
debug2:压缩库存:无,[电子邮件保护],zlib
debug2:语言ctos:
debug2:语言库存:
调试2:first_kex_follows 0
调试2:保留0
debug2:对等服务器 KEXINIT 提议
debug2:KEX 算法:diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1、diffie-hellman-group14-sha1、diffie-hellman-group1-sha1
debug2:主机密钥算法:ssh-rsa,ssh-dss
debug2:密码ctos:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
debug2:密码存储:aes128-ctr、aes192-ctr、aes256-ctr、arcfour256、arcfour128、aes128-cbc、3des-cbc、blowfish-cbc、cast128-cbc、aes192-cbc、aes256-cbc、arcfour,[电子邮件保护]
调试2:MAC ctos:hmac-md5,hmac-sha1,[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:MAC 存储:hmac-md5、hmac-sha1,[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
debug2:压缩ctos:无,[电子邮件保护]
debug2:压缩库存:无,[电子邮件保护]
debug2:语言ctos:
debug2:语言库存:
调试2:first_kex_follows 0
调试2:保留0
debug1:kex:算法:diffie-hellman-group-exchange-sha256
debug1:kex:主机密钥算法:ssh-rsa
debug1:kex:服务器->客户端密码:aes128-ctr MAC:[电子邮件保护]压缩:无
debug1:kex:客户端->服务器密码:aes128-ctr MAC:[电子邮件保护]压缩:无
debug3:发送数据包:类型34
调试1:SSH2_MSG_KEX_DH_GEX_REQUEST(2048排水
debug2:通道 0:ibuf 为空
debug2:通道 0:发送 eof
debug3:发送数据包:类型96
debug2:通道 0:输入漏极 -> 关闭
debug3:接收数据包:类型98
debug1:client_input_channel_req:通道 0 rtype 退出状态回复 0
debug3:接收数据包:类型96
debug2: 通道 0: rcvd eof
调试2:通道0:输出开路->漏极
debug2:通道 0:obuf 为空
调试2:通道0:close_write
debug2:通道 0:输出漏极 -> 关闭
debug3:接收数据包:类型97
debug2:通道 0:rcvd 关闭
debug3:通道0:关闭后不会发送数据
debug2:通道 0:几乎死机
debug2:通道 0:gc:通知用户
debug2:通道 0:gc:用户已分离
debug2:通道0:发送关闭
debug3:发送数据包:类型97
debug2:通道 0:已死
debug2:通道 0:垃圾收集
debug1:通道 0:空闲:客户端会话,nchannels 1
debug3:通道 0:状态:以下连接已打开:
  #0 客户端会话(t4 r0 i3/0 o3/0 fd -1/-1 cc -1)

debug3:发送数据包:类型1
debug1:fd 1 清除 O_NONBLOCK
debug3:fd 2 不是 O_NONBLOCK
已传输:发送 3040,接收 2800 字节,耗时 1.9 秒
每秒字节数:发送 1598.6,接收 1472.4
debug1:退出状态0

/etc/ssh/ssh_config

# 这是 ssh 客户端系统范围的配置文件。请参阅
ssh_config(5) 了解更多信息。此文件提供以下默认设置:
# 用户,并且可以在每个用户的配置文件中更改值
# 或者在命令行上。

# 配置数据解析如下:
# 1. 命令行选项
# 2. 用户特定文件
# 3. 系统范围的文件
# 任何配置值只有在第一次设置时才会改变。
# 因此,主机特定的定义应该位于
# 配置文件,末尾处为默认值。

# 一些常用选项的站点默认设置。要全面了解
# 可用选项列表,其含义和默认值,请参阅
#ssh_config(5) 手册页。

主持人 *
#转发代理没有
# ForwardX11 没有
# ForwardX11Trusted 是
# RhostsRSAAuthentication 否
# RSA身份验证是
# 密码验证是
#基于主机的身份验证否
# GSSAPIAuthentication 否
# GSSAPIDelegateCredentials 没有
# GSSAPIKeyExchange 是
# GSSAPITrustDNS 没有
# 批处理模式否
# 检查主机 IP 是
# AddressFamily 任何
# 连接超时 0
# StrictHostKeyChecking 询问
# 身份文件 ~/.ssh/identity
# 身份文件 ~/.ssh/id_rsa
# 身份文件 ~/.ssh/id_dsa
# 身份文件 ~/.ssh/id_ecdsa
# 身份文件 ~/.ssh/id_ed25519
# 端口 22
# 协议 2
# 密码 3des
# 密码 aes128-ctr、aes192-ctr、aes256-ctr、arcfour256、arcfour128、aes128-cbc、3des-cbc
#MAC hmac-md5,hmac-sha1,[电子邮件保护],hmac-ripemd160
# EscapeChar〜
# 隧道号
# 隧道设备 any:any
# PermitLocalCommand 否
#VisualHostKey 没有
# 代理命令 ssh -q -W %h:%p gateway.example.com
# 重新密钥限制 1G 1h
# 发送环境语言 LC_*
    HashKnownHosts 是
   # GSSAPI 身份验证 是
   # GSSAPIDelegateCredentials 没有

答案1

不幸的是我目前还不能发表评论。

我想到的是客户的情况:

您是否查看过topCPU 负载?SSH 进程可能因加密而占用了 CPU。

您是否查看过ssh -v[vv]并检查过是否有任何异常?也许服务器和客户端同意使用非常安全的密码或 MAC。查看

debug2: ciphers ctos: arcfour
debug2: ciphers stoc: arcfour
[...]
debug1: kex: server->client cipher: arcfour MAC: [email protected] compression: [email protected]
debug1: kex: client->server cipher: arcfour MAC: [email protected] compression: [email protected]

(其中 arcfour 实际上是最弱、CPU 占用最低的算法之一。我通过 SSH 代理进行连接)。另外,查找重新密钥消息。

另外,压缩可能是一个问题。但是,ssh 似乎没有在这里明确说明压缩级别。

debug2: compression ctos: [email protected],zlib,none
debug2: compression stoc: [email protected],zlib,none

您没有明确说明您的远程服务器有多“远程”。在同一个网络中,还是在同一个校园的不同网络中,还是通过互联网?

如果通过互联网,也许您的公司防火墙正在深度检查端口 22 上的 SSH 流量。如果您可以控制 SSH 服务器/etc/ssh/sshd_config文件,也许更改端口可能会有所帮助。

如果通过互联网,SSH 是您使用的‘唯一’隧道吗,还是您通过附加 VPN 使用 SSH?

如果在同一个校园里,我也会想到防火墙、路由、检查问题。我曾经责怪我的互联网提供商,因为我的互联网出了问题;它太慢了。持续了好几天。直到我发现我在思科路由器上启用了调试,这消耗了那里的资源。

如果是本地或远程,您是直接连接还是通过 SSH 代理、网关或跳转主机连接?在这种情况下,就像使用 VPN 一样,您有双重加密。

答案2

我也遇到过这个问题,但在禁用路由器上的 NAT/NAT 增强后,问题得到了改善。 NAT 缺点

相关内容