Копирование файлов через 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 -

Кстати, промежуточных узлов может быть больше одного.

Список использованных источников и литературы

1. scp — OpenSSH secure file copy

2. ssh — OpenSSH remote login client

Комментировать