Вы не можете отключить его из-за того, как работает TCP.
TCP — это протокол, обеспечивающий гарантированную доставку и поток данных. Это означает, что все данные должны быть подтверждены получателем. До тех пор, пока это не будет сделано, стек TCP должен повторить попытку доставки пакетов, а для этого ему необходимо буферизовать любые данные, которые еще не были подтверждены. Кроме того, если в середине потока данных отсутствуют пакеты, получатель должен дождаться их прибытия, прежде чем он сможет переслать следующие данные приложению, поскольку необходимо сохранить порядок данных в потоке данных.
Когда сеть используется агрессивно, пакеты теряются, то есть либо сами данные, либо подтверждение.Это неявно блокирует соединение, поскольку оно должно ждать повторной доставки пакета. Существует несколько алгоритмов и параметров для настройки точного поведения стека TCP в зависимости от среды (низкая или высокая пропускная способность, низкая или высокая задержка... ), но из-за гарантий доставки TCP нет способ полностью отключить управление перегрузкой.
Вам необходимо добавить параметр -g
в командную строку ssh:
-g Allows remote hosts to connect to local forwarded ports.
If used on a multiplexed connection, then this option
must be specified on the master process.
Это откроет перенаправленные порты на хосте B
, чтобы они доступен из C
. Это предполагает, что ваша конфигурация брандмауэра на B
разрешает эти соединения.
Опция -g
изменяет локальный адрес привязки, который ssh
использует для локального порта. Без -g
-L 8000:localhost:8000
приводит к:
$ netstat -tln | grep 8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
tcp6 0 0 ::1:8000 :::* LISTEN
Как видите, в данном случае оба сокета привязаны к петлевому адресу(127.0.0.1
для ipv4 и ::1
для ipv6 ).
Вместо -g
мы получаем:
$ netstat -tln | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
В этом случае вы можете видеть, что ssh
теперь привязывается к подстановочному адресу, а не к петлевому адресу.
Почему sudo
? sudo
не является решением всех проблем, а часто и причиной.
Думаю, это то, чего вы хотите.
ssh -L local_port:remote_ip:remote_port jump_user@jump_ip
ssh -L C_PORT:A_ip:3306 B_user@B_ip -f -N