我在这里找到了解决办法。http://chrisjordan.ca/post/15052405906/chaining-ssh-tunnels。为什么这个答案是对的?A,B,C,D,E之间的连接加密了吗?据我所知,只有本地主机和A之间的连接是加密的。
ssh -NL 6000:B:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 A &
ssh -NL 6001:C:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6000 &
ssh -NL 6002:D:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6001 &
ssh -NL 6003:E:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6002 &
ssh localhost -p 6003
Welcome to E!我想到的解决办法是:
ssh A
ssh B
...假设每个服务器都有一个链中的前一个服务器的公钥。
上述两种解决方案之间有什么区别吗?
发布于 2013-10-07 15:26:43
使用来自chrisjordan.ca的解决方案,每个连接都是加密的。这意味着来自A->E的每个数据包被加密和解密4次.它还会受到多层ssh隧道开销的影响,这可能会在CPU加密成本之外损害性能。有关通过ssh连接发送通信量的负面影响的信息,请参见HPN SSH。
你是从A之前的某个主机开始的,让我们称之为0。
0-流量由第一个ssh加密,它在ssh连接上创建一个隧道。该隧道在A处退出ssh,在没有进一步加密的情况下转发任何通信量(至少,这个特定的SSH不加密)到B。
0-B通信由第二个ssh加密。这个ssh从0-A穿过第一个ssh的隧道,退出隧道,然后终止于B。这个ssh还创建了第二个隧道。使用该隧道的通信量通过0-Bssh连接,在B处退出ssh,然后在没有进一步加密的情况下被转发到C。
类似地,0-C流量穿越0-B隧道,然后退出,进入C,在那里它终止.它创造了另一条隧道。
类似地,0-D和最后0-E流量都是通过逐步增加的ssh隧道转发的.
那么这和你建议的方法有什么区别呢?
1)您没有多个加密和隧道层,所以您的方法应该更快。可能要快得多。
2)另一方面,您的方法要求您使用在0和E之间发送的流量信任每个主机。博客解决方案阻止了这一点,因为最内部的ssh连接加密0到E之间的所有通信量。
3)类似地,博客解决方案在0和E之间创建了一个透明的ssh连接,这样您就可以从端到端执行运行scp/sftp之类的操作。
如果您担心性能问题,但希望维护在0和E之间使用的端到端加密,那么您可能可以通过各个ssh连接逐个构建隧道。类似于(未经测试的):
0% ssh -L6000:localhost:6000 A
A% ssh -L6000:localhost:6000 B
B% ssh -L6000:localhost:6000 C
C% ssh -L6000:E:22 D然后在另一个窗口..。
0% ssh localhost:6000
E%https://serverfault.com/questions/544316
复制相似问题