Копирование файлов через SSH
Часто во время разработки встраиваемых систем возникает необходимость в передаче файлов между целевой системой и машиной, на которой ведется разработка. Обычно для этого используется команда scp из пакета openssh. Эта команда доступна в Linux, Windows 10 и MacOS.
Пример 1
Для передачи файла payload.txt в папку /tmp целевой системы target-host:
scp payload.txt user@target-host:/tmp
Пример 2
Для чтения файла /proc/config.gz из целевой системы target-host:
scp user@target-host:/proc/config.gz config.gz
Однако, в некоторых конфигурациях прямой доступ к целевой машине недоступен. В этом случае файлы можно передавать через промежуточные узлы с помощью связки ssh и tar.
Чтобы не вводить пароли доступа каждый раз можно предварительно скопировать публичные ключи на целевую и промежуточную машины с помощью команды ssh-copy-id.
Пример 3
Для передачи файла payload.txt в папку /tmp целевой системы target-host через промежуточный узел jump-host:
tar cf - payload.txt | ssh -J user1@jump-host user2@target-host 'tar x -v -f - -C /tmp;'
Пример 3A
Для передачи файла payload.txt в папку /tmp целевой системы target-host через промежуточный узел jump-host:
scp -o ProxyJump=user1@jump-host payload.txt user2@target-host:/tmp
Пример 4
Для чтения файла /proc/config.gz из целевой системы target-host через промежуточный узел jump-host:
ssh -J user1@jump-host user2@target-host 'tar cf - -С /proc config.gz' | tar x -v -f -
Кстати, промежуточных узлов может быть больше одного.
Список использованных источников и литературы