![Использование SCP поверх существующей цепочки SSH? Возможно ли?](https://rvso.com/image/1552376/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20SCP%20%D0%BF%D0%BE%D0%B2%D0%B5%D1%80%D1%85%20%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B5%D0%B9%20%D1%86%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8%20SSH%3F%20%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%3F.png)
При копировании файлов 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, поэтому вам может потребоваться явно исключить определенные хосты из использования этой опции, если вы установили ее в качестве опции по умолчанию.