Передача данных между серверами Linux

2025.08.02
Разберем как передавать файлы через терминал Linux при помощи rsync, scp, sftp. Попробуем монтировать удаленную файловую систему по ssh через sshfs. Посмотрим как можно передавать файлы через Midnight Commander.

Периодически в своей работе сталкиваюсь с необходимостью передать файлы с одного сервера на другой, или скачать с удаленного сервера на свой рабочий компьютер. Хочется это делать быстро и подручными средствами без использования графического нагромождения в виде десктопных клиентов по типу WinSCP и FileZilla, несмотря на всю прелесть GUI. Чтобы каждый раз не гуглить эти элементарные команды, зафиксирую их в этой краткой инструкции.

RSYNC

RSYNC (remote synchronization) - утилита для синхронизации данных.

На удаленном и локальном хостах обязательно должна быть установлена утилита rsync.

Скачать файл с удаленного хоста в директорию на локальном:

rsync -av user@host:/remote/path/to/file /local/path/directory

Скачать все файлы из директории на удаленном хосте в директорию на локальном хосте:

rsync -av user@host:/remote/directory/* /local/path/directory

Загрузить файл с локального хоста в директорию на удаленный:

rsync -av /local/path/file user@remote_host:/remote/path/to/directory

К тому же можно копировать файлы из одной директории в другую только на локальном хосте, это может быть удобно например для CI/CD, когда нам нужно синхронизировать файлы из репозитория с директорией на локальном хосте:

rsync -av --delete /local/path/directory/* /local/app

Опции:

SCP

SCP (secure copy) - утилита и протокол защищенного копирования данных через SSH.

Скачать файл с удаленного хоста на локальный:

scp user@host:/remote/path/to/file /local/path/directory

Загрузить файл с локального хоста на удаленный:

scp /local/path/file user@remote_host:/remote/path/to/directory

Для рекурсивного скачивания/загрузки директории нужно использовать опцию -r:

scp -r user@host:/remote/directory /local/directory

Опции:

SFTP

SFTP (SSH File Transfer Protocol) реализуется как подсистема ssh-сервера. Для OpenSSH SFTP включен по умолчанию, в файле /etc/ssh/sshd_config можно найти такую строку:

Subsystem       sftp    /usr/lib/openssh/sftp-server

Для подключения используем sftp-клиент:

sftp app@192.168.1.15
sftp>

Если видим приглашение к вводу sftp> значит получилось подключиться и мы можем начать взаимодействовать с сервером. Например, скачаем файл:

# текущая рабочая директория на локальном хосте
sftp> lpwd
Local working directory: /home/byurrer/test

# текущая рабочая директория на сервере
sftp> pwd
Remote working directory: /home/app

# список файлов на сервере
sftp> ls
test

# список файлов на локальном хосте (пусто)
sftp> lls

# список файлов на сервере в директории test
sftp> ls test
test/1.txt  test/2.txt

# скачать с сервера на локальный хост файл
sftp> get test/1.txt
Fetching /home/app/test/1.txt to 1.txt

# список файлов на локальном хосте
sftp> lls
1.txt

Не трудно заметить что команды для удаленного и локального хостов очень похожи, но для локального хоста всегда нужно подставлять символ l.

Для вызова справки используйте ? или help.

SSHFS

Оказывается, можно смонтировать удаленную директорию на локальный хост и работать с ней как с локальной, при помощи sshfs:

# создаем директорию для монтирования
mkdir ~/remote_dir

# монтируем удаленную директорию в локальную
# опция -o reconnect позволяет переподключаться в случае потери соединения
sshfs user@remote_host:/remote/path ~/remote_dir -o reconnect

# делаем что нужно

# отмонтируем удаленную директорию при завершинии работ
umount ~/remote_dir

Midnight Commander

Удобно передавать файлы в графическом интерфейсе, а псевдографический MC позволяет это делать. Для этого нужно выбрать панель (правую или левую) как на скриншоте:

И выбрать например Shell-соединение или SFTP-соединение, ввести user@host и на выбранной панели появится список файлов и директорий на удаленном хосте:

Было замечено, что в MC через SFTP-соединение подключиться не ко всем серверам, даже если через обычный sftp-клиент соединение успешно. Причина мне пока не известна.

В Midnight Commander реализован vfs с поддержкой некоторых форматов, именно поэтому в нем можно просматривать многие форматы файлов, например, можно просматривать сжатые архивы. Кроме того в MC реализован FISH, при помощи которого можно делать такие трюки:

В телеграм канале DevOps от первого лица можно оставить комментарий или почитать интересные истории из практики DevOps