Я нашел решение здесь. http://chrisjordan.ca/post/15052405906/chaining-ssh-tunnels. Почему это правильный ответ? Зашифрованы ли соединения между A, B, C, D, E? Насколько я понимаю, зашифровано только соединение между localhost и 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
...
предполагая, что каждый сервер имеет открытый ключ предыдущего сервера в цепочке.
Есть ли разница между двумя вышеуказанными решениями?
С помощью решения от chrisjordan.ca каждое соединение зашифровано. Это означает, что каждый пакет от A-> E зашифровывается и дешифруется 4 раза. Он также подвержен нескольким уровням накладных расходов по туннелю ssh, что может снизить производительность сверх затрат ЦП на шифрование. Видеть HPN SSH для получения информации о негативных последствиях отправки вашего трафика через ssh-соединение.
Вы начинаете с некоторого хоста перед A, назовем его 0.
0-A трафик шифруется первым ssh, который создает туннель через ssh-соединение. Этот туннель выходит из ssh в A и перенаправляет любой трафик без дальнейшего шифрования (по крайней мере, не с помощью этого конкретного SSH) в B.
Трафик 0-B шифруется вторым ssh. Этот ssh проходит первый туннель ssh от 0-A, выходит из туннеля и затем завершается на B. Этот ssh также создает второй туннель. Трафик, использующий этот туннель, проходит через ssh-соединение 0-B, выходит из ssh в точке B и перенаправляется без дальнейшего шифрования на C.
Трафик 0-C, аналогично, проходит через туннель 0-B, затем выпадает, переходит к C, где он завершается. Он создает еще один туннель.
Точно так же трафик 0-D и, наконец, 0-E пересылается через все больше туннелей ssh.
Так в чем разница между этим и методом, который вы предлагаете?
1) у вас нет нескольких уровней шифрования и туннелирования, поэтому ваш метод должен быть быстрее. Потенциально намного быстрее.
2) С другой стороны, ваш метод требует, чтобы вы доверяли каждому хосту по пути трафик, который вы отправляете между 0 и E. Решение блога предотвращает это, потому что самое внутреннее соединение ssh шифрует весь трафик между 0 и E.
3) аналогично решение для блога создает прозрачное ssh-соединение между 0 и E, поэтому вы можете выполнять такие действия, как запуск 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%