SCP устанавливает новое соединение при копировании файлов, что иногда может усложнить работу при наличии брандмауэров.

Например,

Host-A <-> Host-B <-> Host-C <-> Host-D

  • Host-A подключается к Host-B через SSH, а затем Host-B подключается к Host-C через SSH, а затем к Host-D.
  • Host-A не может подключаться к другим компьютерам, кроме Host-B, Host-B может подключаться только к Host-A и Host-C, Host-C может подключаться только к Host-B и Host-D, а последний Host-D может подключаться только к Host-C.

Команда (на Host-D) scp /home /user /file Host-A:/home /user /newfile попытается создать новый SSH-туннель между ними, а это не то, что мне нужно. Я хочу, чтобы существующая цепочка туннелей SSH копировала файл обратно через предыдущие хосты, пока не достигнет Host-A.

Как я могу это сделать?

1 ответ1

0

Вы можете повторно использовать существующие соединения. Либо используйте параметр командной строки -M , либо (клиентский) параметр конфигурации ControlMaster . Смотрите этот ответ на StackOverflow для деталей.

Я использовал это широко, в сочетании с ControlPersist чтобы закрыть соединение только после задержки. Это позволяет избежать времени подключения, которое вы бы в противном случае понесли, и значительно повышает производительность при многократном закрытии и повторном подключении (как я часто делаю во время интерактивного использования).

Обратите внимание, что он не очень хорошо работает для подключения к некоторым хостам - например, к GitHub - поэтому вам может потребоваться явно исключить использование этой опции некоторыми хостами, если вы установили ее по умолчанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .