我使用 Ubuntu ssh 连接到远程 AWS 服务器。我使用 ssh 的端口转发功能来执行此操作。我尝试过转发动态端口 (ssh -D) 或单个端口 (ssh -L,dante 作为远程 socks 服务器运行)。两者都同样慢。我还尝试了不同的密码 (ssh -c)。
并发 TCP 连接几乎不起作用。例如,我可以访问 speedtest.net 并开始测试(速度相当快,可能达到我的线路速度的最大值),如果我在测试仍在运行时尝试执行任何操作(即加载 google.com),则所有其他连接似乎都会挂起,直到速度测试结束。
我意识到 OpenSSH 是单线程的。这是问题所在吗?它甚至没有出现在我的顶部。远程服务器上的 sshd 也是如此——没有处理器命中。
有没有什么方法可以提高 ssh 的性能,或者我应该升级到 OpenVPN 或更适合这个的东西?
答案1
尝试从方程式中移除 dante。
简单
ssh -D 1080 username@server
然后在浏览器中将您的 socks 5 代理设置为 localhost:1080
并重复测试。
假设我现在没有使用代理,而且我在芝加哥地区,
下面的测试是从我到最近的服务器进行的,没有使用代理
http://beta.speedtest.net/result/5790745951
现在让我们设置 ssh -D 代理并将我的浏览器设置为使用代理。速度测试现在将检测到我的流量出口点位于加利福尼亚的某个地方(因为我在加利福尼亚可用区运行我的 AWS)
这是我使用 socks 1080(无 dante)进行的测试
http://beta.speedtest.net/result/5790754004
速度明显下降。首先,我的流量需要从我这里到加利福尼亚,然后从 ssh 隧道的另一侧退出并到达速度测试服务器,然后返回。除此之外,由于它在 ssh 隧道内运行 - 还增加了延迟,因为 ssh 需要加密/解密每个数据包。
不过,在速度测试期间,我能够正常浏览其他网站。速度较慢,但还不至于太慢
我现在将从浏览器设置中删除代理,并选择直接连接到加利福尼亚的某个地方。
http://beta.speedtest.net/result/5790802203
所以显然现在速度更快了,实际上它的速度与直接连接到芝加哥的速度几乎相同。
这证明 99% 的延迟是由 ssh 隧道增加的。
正如其他人所建议的 - 您可以设置 squid 并用 squid 测试您的速度。也许它会有更好的性能。
答案2
这可能是因为每次 SSH 需要建立与主机的连接时,它都需要一路前往 AWS,然后再返回到您尝试联系的服务器。基本上,这会增加从您的机器到 AWS 机器以及从 AWS 机器到您联系的服务器的延迟。
尝试从您的工作站 ping AWS 机器并记录延迟,然后从 AWS 机器 ping 您正在联系的主机并记录该延迟。将两者相加,这就是您可以通过该链接实现的理论最大延迟。OpenVPN 和 SSH 无法突破此限制,但是如果您的流量主要是 HTTP,那么您可以在 AWS 机器或本地机器上设置缓存 squid 服务器,以减少必须通过此链接传输的请求数量。