
При копировании файлов SCP устанавливает новое соединение, что иногда может затруднить работу, если задействованы брандмауэры.
Например,
Хост-A <--> Хост-B <--> Хост-C <--> Хост-D
- Хост-A подключается к Хосту-B через SSH, затем Хост-B подключается к Хосту-C через SSH, а затем к Хосту-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 Хост-A:/home/user/newfileпопытается создать новый туннель SSH между ними, что мне не нужно. Я хочу, чтобы существующая цепочка туннелей SSH копировала файл обратно через предыдущие хосты, пока он не достигнет Host-A.
Как я могу это сделать?
решение1
Вы можете повторно использовать существующие соединения. Используйте либо переключатель командной строки -M
, либо (клиентскую) опцию конфигурации ControlMaster
. Смотритеэтот ответПодробности на StackOverflow.
Я широко использовал это в сочетании с ControlPersist
to, чтобы закрыть соединение только после задержки. Это позволяет избежать времени соединения, которое вы бы в противном случае понесли, и радикально повышает производительность, когда вы закрываете и повторно подключаетесь несколько раз (как я часто делаю во время интерактивного использования).
Обратите внимание, что он не очень хорошо работает для подключения к некоторым хостам, например, GitHub, поэтому вам может потребоваться явно исключить определенные хосты из использования этой опции, если вы установили ее в качестве опции по умолчанию.