更新
- 我已经将其缩小到仅发生在工作场所的无线网络上。在家里,我没有遇到任何延迟
- 似乎在“大量”使用 SSH 并通过一台或两台机器建立隧道后,网络会完全断开,我不得不手动重新连接
- 通过查看 WireShark 捕获的 OpenSSH 与 JSch 的 SSH 会话,似乎 OpenSSH 有一些
TCP Dup Ack
、TCP Retransmission
和TCP 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 选项)时
- 更改类似问题中提到的设置并不能解决问题
- 前任:ssh 登录缓慢的主要原因
- 我发现的大多数解决方案都解决了登录响应缓慢的问题。我的问题发生在登录后
- 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
不幸的是我目前还不能发表评论。
我想到的是客户的情况:
您是否查看过top
CPU 负载?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 缺点