Копирование файлов по ssh. команда scp
Содержание:
- Выбор другого файла конфигурации
- Создание и настройка
- 8.7. Как скопировать файлы с сервера на сервер по протоколу SSH, MC, RSYNC
- Опции команды SSH
- Запустить SSH в фоновом режиме
- Конвертация сертификатов
- Using telnet is not recommended
- Копирование файлов scp
- Подключение по SSH
- Как пользоваться PuTTY
- Как увидеть неудачные попытки входа SSH
- Выполнение команд на удаленном Linux сервере
- Передача файлов с помощью SFTP
- Примеры синхронизации Rsync
- 1. Копирование и синхронизация файлов на локальном компьютере
- 2. Синхронизация папок на локальной машине
- 3. Синхронизация с удаленным сервером
- 4. Синхронизация файлов по SSH
- 6. Синхронизация не всех файлов в rsync
- 7. Удаление при синхронизации
- 8. Максимальный размер файлов
- 9. Удаление исходных файлов
- 10. Режим симуляции rsync
- 11. Ограничить скорость передачи
- 12. Автоматическая синхронизация папок rsync
- How to Transfer Files with Rsync over SSH
- Требования
- Использование для передачи файлов по SSH
- SFTP в Double Commander
- Ключ сервера
- Копирование файлов
- Удалённое исполнение кода
Выбор другого файла конфигурации
Мобильным пользователям, которые попеременно используют сеть компании и публичные сети, будет тяжело каждый раз менять настройки scp. Лучше всего создать для этого отдельный файл ssh_config и воспользоваться параметром -F.
По умолчанию файл ssh_config для пользователя находится в ~/.ssh/config. Если создать отдельный файл proxy_ssh_config для использования прокси, это упростит переход между сетями.
Например, если в сети компании используется прокси-сервер, а в публичной сети – нет, а пользователь попеременно работает в разных сетях, можно использовать опцию -F с именем нужного файла конфигурации для сети компании, а в публичной сети ее не указывать:
# scp -F /home/user/proxy_ssh_config Label.pdf root@10.10.10.2:.
Создание и настройка
Установить FTP-сервер на ПК может любой пользователь, даже чайник. Это можно сделать либо средствами операционной системы, либо с помощью сторонних программ, таких как Filezilla server.
FTP в windows
В Windows 7 есть все для того, чтобы установить и настроить FTP сервер, ничего дополнительно устанавливать не придётся. На более новых версиях этой системы все делается аналогично.
Чтобы сделать ФТП сервер на компьютере:
- Кликните по кнопке «Пуск», откройте «Панель управления» и выберите строку «Программы и компоненты».
- Выберите ссылку «Включение или отключение компонентов Windows», откройте пункт «Службы IIS», поставьте галочку в строке «FTP-сервер» и всех его подпунктах.
- Зайдите в меню «Администрирование» на панели управления.
- Откройте «Диспетчер служб IIS».
- Кликните по строке «Сайты», расположенному в правой части окна, и нажмите «Добавить FTP-сервер».
- Задайте имя соединения и путь к общей папке, через которую вы будете обмениваться данными.
- Введите IP-адрес, номер порта и параметры шифрования (можно настроить, как на рисунке).
- Настройте доступ (анонимный – без пароля, обычный – нужно будет ввести имя и пароль).
- Зайдите в «Панель управления», откройте «Система и безопасность» и выберите «Брандмауэр Windows».
- В левом меню выберите пункт «Дополнительные параметры».
- Кликните по строке «Правила для входящих подключений», которая находится слева, кликните правой кнопкой по строке «FTP-сервер» (находится в центральной части окна) и выберите «Включить правило». Те же действия повторите со строкой «Трафик FTP сервера в пассивном режиме».
- В левой части окна выберите «Правила для исходящего подключения» и включите «Трафик FTP-сервера».
- Чтобы настроить права пользователей, зайдите в раздел «Администрирование» панели управления и кликните по строке «Управление компьютером».
- Щёлкните правой кнопкой по свободному месту и выберите сроку «Создать группу».
- Введите имя группы.
- В папке «Пользователи» создайте нового пользователя.
- Заполните поля, касающиеся имени пользователя и пароля.
- Щёлкните правой кнопкой по только что созданному пользователю, выберите пункт «Свойства», перейдите на закладку «Членство в группах» и, нажав кнопку «Добавить», задайте пользователю новую группу.
- Чтобы разрешить пользователю подключаться к выделенной для обмена папкой, щёлкните по ней правой кнопкой и выберите строку «Свойства», перейдите на вкладку «Безопасность» и нажмите кнопку «Изменить».
- Щёлкните по кнопке «Добавить» и добавьте созданную недавно группу. Отметьте галочками все пункты в колонке «Разрешить».
- Зайдите ещё раз в меню службы IIS, щёлкните по вашему сайту и кликните по иконке «Правила авторизации».
- Кликните по пустому месту правой кнопкой и выберите «Добавить разрешающее правило».
- Отметьте пункт «Указанные роли или группы пользователей» и введите название созданной группы.
На этом создание FTP сервера закончено. Теперь вы знаете, как поднять домашний файлообменник.
Filezilla server
Самое популярное приложение для создания FTP – это FileZilla Server. Его можно скачать с официального сайта.
Чтобы создать свой FTP сервер FileZilla:
- для создания пользователя в пункте верхнего меню «Edit» выберите подпункт «Users»;
- нажмите кнопку «Add»;
- в поле ввода наберите имя пользователя;
- после этого введите пароль;
- создайте рабочую папку;
- задайте права на эту папку;
На этом создание FTP-сервера закончено.
8.7. Как скопировать файлы с сервера на сервер по протоколу SSH, MC, RSYNC
1. Подключитесь к серверу по протоколу SSH используя SSH клиент, например Putty
mc
Right → Ftp Linklogin_ftp:pass_ftp@name_server.comОК
Copy
Для максимально быстрого и удобного копирования большого количества файлов/папок больших размеров желательно использовать утилиту rsync, особенности которой — копирование без искусственных ограничений, сжатия и шифрования, из-за которых копирование по ftp и ssh и происходит не очень быстро, на фактической скорости чтения/записи дисков и пропускной способности сети .
Разберем работу утилиты на примере
rsync -apogvr -e «ssh -c arcfour» —progress —bwlimit=10240 /var/www/slagor/data/www/ slagor@91.234.35.81:/var/www/slagor/data/www
Приведенную команду нужно запустить по ssh на исходящем сервере (с которого мы копируем данные). Также ее можно запустить и севевер получетя, но тогда нужно поменять местами получателя и отправителя (slagor@91.234.35.81:/var/www/slagor/data/www /var/www/slagor/data/www/).
При этом утилита должна быть установлена на обеих серверах — если на каком-то она не установлена — установить ее можно командой apt-get install rsync либо yum install rsync (для centos).
Так вот эта команда скопирует содержимое папки /var/www/slagor/data/www/
в папку /www пользователя slagor на сервер 91.234.35.81
При этом нужно будет указать пароль пользователя slagor. Можно также использовать root либо другого пользователя, при этом папку получателя нужно указывать с учетом корня пользователя.
Ключ ssh -c arcfour дополнительно ускорит rsync за счет использования более простого метода шифрования.
Иногда так случается, что скорость копирования нужно ограничить (например для того, чтобы не нагружать сильно дисковую систему сервера). Для ограничения скорости можно использовать директиву
—bwlimit=KBPS
которая ограничить скорость ввода/вывода, Кбайт/с
В примере, указанном выше команда с ограничением скорости копирования 10 МБ/С.
Добавление опций заставляет rsync делать следующее:
-p, —perms — перенос прав;
-g, —group — установить группу конечного файла таким же, как и у исходного;
-o, —owner — установить владельца конечного файла таким же, как и у исходного;
Разумеется, группы и пользователи должны существовать на целевом сервере куда осуществляется копирование.
Так же, бывают ситуации когда нужно исключить из копирования некоторый путь.
Тогда, нужно использовать директиву: —exclude=’dir1/dir2/’
Где dir1/dir2/ — это исключаемый путь, относительно базы указанной в качестве источника копирования.
Опции команды SSH
Теперь давайте рассмотрим самые основные опции команды ssh:
- f — перевести ssh в фоновый режим;
- g — разрешить удаленным машинам обращаться к локальным портам;
- l — имя пользователя в системе;
- n — перенаправить стандартный вывод в /dev/null;
- p — порт ssh на удаленной машине;
- q — не показывать сообщения об ошибках;
- v — режим отладки;
- x — отключить перенаправление X11;
- X — включить перенаправление Х11;
- C — включить сжатие.
Это далеко не все опции утилиты, остальные выходят за рамки данной статьи. Многие настройки работы ssh можно изменять через конфигурационный файл ~/.ssh/config но здесь мы это тоже подробно рассматривать не будем.
Запустить SSH в фоновом режиме
Существует несколько способов запустить ssh соединение в фоновом режиме — то есть освободим текущий терминал.
-L, screen, tmux, nohup
Мне запустить ssh фоном из скрипта помог nohup, поэтому начнём с него
nohup ssh user@host «cd scripts;python3 my_script.py $ARG1 $ARG2; exit» &
Для чего это было нужно: Python скрипт сначала
открывал одно ssh соединение из
subprocess
там выполнялась команда для запуска
мониторинга потребления памяти
и больше от этого соединения ничего было не нужно, зато необходимо было
выполнять новые соединения с нагрузкой из другого скрипта.
Чтобы уйдя из первого подключения не оборвать мониторинг потребления памяти
перед ssh нужно было добавить nohup, а в самом конце поставить &
Конвертация сертификатов
Рассмотрим простой пример: вы достали из
базы данных
сертификат
MIIC4jCCAc … A7A6Rpt8V9Q==
, но он не отформатирован и не проходит валидацию
Сертификат, конечно, длиннее, я поставил троеточие для экономии места и вашего времени.
Выполните
echo ‘MIIC4jC … 7A6Rpt8V9Q==’ | base64 -d | openssl x509 -inform der
Либо, если вам нужно работать с файлами — сохраните исходный сертифика в фай
raw_cert
echo MIIC4jC … 7A6Rpt8V9Q== > raw_cert
cat raw_cert | base64 -d | openssl x509 -inform der > cert
cat cert
——BEGIN CERTIFICATE——
MIIC4jC … 7A6Rpt8V9Q==
——END CERTIFICATE——
Такого же результата можно было добиться аккуратно добавив ——BEGIN CERTIFICATE—— в начало
и ——END CERTIFICATE—— в конец файла, но не всегда всё так просто.
Using telnet is not recommended
In addition to SSH, the PuTTY can be used as a telnet client. Telnet is insecure. Its use is not recommended.
The main problem with is that it transmits all passwords and any transmitted data in the clear. Anyone with access to any computer on the same network can steal user names and passwords that are transmitted. Such password sniffing attacks were very common on the Internet already in the 1990s.
sessions can also be hijacked in the network. Attackers can inject their own commands into sessions. Protection from such attacks was the main reason why Tatu Ylonen developed SSH as a replacement for in the first place. Use of has not been recommended for 20 years.
Копирование файлов scp
Эта статья рассчитана в первую очередь на начинающих, поэтому я попытаюсь объяснять все как можно подробнее. Перед тем, как мы перейдем к практике, нужно рассмотреть общий синтаксис команды:
$ scp опции пользователь1@хост1 : файл пользователь2@хост2: файл
Опции утилиты больше касаются протокола SSH и настраивают общее ее поведение. Дальше следует адрес первого и второго файла. Каждый из них может быть расположен как на локальной, так и на удаленной машине. А теперь рассмотрим основные опции, которые могут нам понадобиться:
- -1 — использовать протокол SSH1;
- -2 — использовать протокол SSH2;
- -B — пакетный режим для передачи нескольких файлов;
- -C — включить сжатие;
- — l — установить ограничение скорости в кбит/сек;
- -o — задать нужную опцию SSH;
- -p — сохранять время модификации;
- -r — рекурсивное копирование директорий;
- -v — более подробный режим.
scp /home/sergiy/file root@losst.ru:/root/
В качестве пользователя нужно использовать любого пользователя, который есть на сервере. Вместо IP вы можете также домен сервера. Только необходимо, чтобы у выбранного пользователя были права записи в указанную папку.
С помощью опции -r вы можете скопировать на удаленную машину целый каталог. Команда будет выглядеть вот так:
scp -r /home/sergiy/photos root@losst.ru:/root/
Убедитесь, что у исходного каталога нет косой черты, а у каталога назначения она должна обязательно быть. Немного изменив синтаксис с косой чертой можно передать все файлы из каталога на удаленный сервер:
scp -r /home/sergiy/photos/* root@losst.ru:/root/
Если поменять местами локальный путь и сервер, то вы сможете копировать файлы scp c удаленного сервера на локальный компьютер:
scp root@losst.ru:/root/file /home/sergiy/
Таким же самым образом вы можете копирование файлов scp или папок с сервера:
scp -r root@losst.ru:/root/photos /home/sergiy/
Обратите внимание, что папка, в которую вы собираетесь копировать должна завершаться косой чертой, иначе папка, которую вы копируете запишется вместо той, в которую нужно скопировать. Чтобы скачать файл scp из одного сервера на другой, просто необходимо указать данные аутентификации на каждом из них
Например, скопируем один файл:
Чтобы скачать файл scp из одного сервера на другой, просто необходимо указать данные аутентификации на каждом из них. Например, скопируем один файл:
scp root@losst.ru:/home/root/index.html root@losst.ru:/home/root/www/
Скопируем папку с того же удаленного сервера:
scp root@losst.ru:/root/photos root@losst.ru:/home/root/www/
Подключение по SSH
Подключение происходит с помощью команды
ssh + имя_пользователя + хост
Например
ssh andrei@192.168.0.2
Если вы подключаетесь к хосту впервые, появится предупреждение
The authenticity of host ‘192.168.56.101 (192.168.56.101)’ can’t be established.
ECDSA key fingerprint is SHA256:db8az/qbrWOJWvNRv2d9UHaDBnnUHanJ9Svca9vFx7c.
Are you sure you want to continue connecting (yes/no/)?
Если выбрать yes
то в файл
~/.ssh/known_hosts
добавится похожая строка:
|1|abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567
Обычно файл
known_hosts
имеет следующий формат (записи идут через пробел)
Таким образом
abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1=
Это хэш от имени сервера.
Здесь через пробел записаны три элемента: хэш от имени сервера, название используемого ассиметричного алгоритма и публичный ключ сервера. Разберём их по очереди.
Как пользоваться PuTTY
1. Интерфейс программы
Сразу же после запуска программы из меню пуск вы увидите графический интерфейс ее настройки. После подключения вы будете видеть только терминал, но настроить программу можно через удобный интерфейс.
Рассмотрим за что отвечают те или иные вкладки программы, чтобы вы ориентировались что и где искать. У нас есть четыре вкладки:
- Session — отвечает за подключение удаленному серверу, тут мы вводим параметры подключения, порт, адрес, а также можем сохранить все настройки putty, чтобы не настраивать каждый раз заново.
- Terminal — позволяет включать или отключать возможности терминала;
- Window — настройка внешнего вида окна, цвет, шрифт, кодировка;
- Connection — настройка параметров подключения, алгоритма шифрования, сжатия, ключей аутентификации, X11 и других параметров.
Каждая вкладка имеет несколько подразделов, но мы не будем сейчас их трогать, а перейдем сразу к практике и посмотрим как подключиться putty к удаленному узлу.
2. Подключение к удаленному компьютеру PuTTY
Чтобы подключиться к удаленному компьютеру по SSH перейдите на вкладку «Session», здесь, в поле «Host Name» необходимо прописать ip адрес или имя хоста, компьютера, к которому вы хотите подключиться, в поле порт — нужно указать порт, на котором запущен SSH сервер, по умолчанию используется порт 22:
Далее, нажмите кнопку «Open». После этого появится запрос на добавление ключа сервера в список доверенных ключей, нажмите «Да»:
Затем вам будет нужно ввести логин пользователя и пароль
Важно заметить, что скопировать логин или пароль у вас не получится, необходимо только вводить вручную:
Теперь авторизация прошла успешно, и вы можете выполнять нужные действия на сервере:
3. Сохранение сессии PuTTY
Чтобы не вводить каждый раз ip и порт можно сохранить эти данные в виде сессии, для этого пропишите новое имя в поле «Saved Sessions», а затем нажмите кнопку «Save»:
Теперь вы сможете загрузить сохраненную сессию, нажав кнопку «Load».
После того как будет завершена настройка putty и все параметры будут выставлены правильно вы можете сохранить настройки и не вводить их несколько раз.
4. Имя пользователя по умолчанию
Вы можете не вводить имя пользователя каждый раз, для этого перейдите на влкадку «Connection», затем «Data» и в поле «Auto-login Username» пропишите имя пользователя, например, root:
Теперь подключение putty будет выполняться от имени этого пользователя.
5. Авторизация по ключу ssh в PuTTY
Чтобы не вводить каждый раз пароль можно настроить авторизацию по ключу. В Linux такая возможность используется очень широко потому что это удобно. Первым делом необходимо создать ключ. Для этого запустите утилиту PuTTYgen и установите переключатель в положение «SSH-2 RSA» нажмите «Generate»:
Обязательно ключ должен быть SSH-2 RSA, если в главном окне нет, выберите в меню «Key». Подвигайте мышкой, чтобы создать достаточное количество энтропии:
Ключ готов, затем, с помощью кнопок «Save Public Key» и «Save Private Key» сохраните оба ключа.
Далее, откройте PuTTY, перейдите на вкладку «Connection», затем «SSH», затем «Auth»:
Здесь необходимо нажать кнопку «Browse» и добавить недавно сохраненный приватный ключ:
Далее, возвращаемся на вкладку «Session», выбираем наше сохранение и нажимаем «Save» чтобы сохранить настройки. Осталось только отправить наш открытый ключ на сервер. Для этого авторизуйтесь на нем с помощью пароля и открытый ключ вставьте ключ в конец файла /root/.ssh/authorized_keys.
Ключ можно брать прямо из окна PuTTYgen «Public key for pasting» или из файла открытого ключа:
Все, теперь можно выходить и авторизоваться снова. На этот раз подключение по ssh putty будет выполняться с помощью нашего ключа. Не забывайте сохранять настройки сессии, чтобы не выбирать ключ каждый раз. Теперь вы знаете как пользоваться программой putty, рассмотрим еще передачу файлов.
5. Передача файлов через scp в PuTTY
Не все знают, но PuTTY позволяет передавать файлы через ssh также как это делает linux с помощью утилиты scp. Нажмите Win+R, затем пропишите cmd, чтобы запустить командную строку.
Синтаксис утилиты pcsp выглядит следующим образом:
pscp опции путь_файлу имя_пользователя@хост/путь/к/файлу/на/удаленном/хосте
Например, мы можем отправить файл из текущей папки в папку пользователя /root/:
С помощью опции -P можно задать удаленный порт:
А опция load позволяет загрузить сохраенные настройки сессии PuTTY:
Теперь вы знаете как использовать putty для передачи файлов.
Как увидеть неудачные попытки входа SSH
Если настроен вход по паролю, то для вывода неудачных попыток наберите команду:
journalctl | grep -i 'Failed password for'
Если настроен вход по публичному ключу, но не отключена возможность входа по паролю, то после неверного ключа, будет предоставлена возможности войти по паролю. Такие неудачные попытки входа по паролю можно найти такой же командой:
journalctl | grep -i 'Failed password for'
При неудачной попытке входа из-за неверного ключа, при уровне вербальности (LogLevel) по умолчанию (INFO) специальные сообщения не записываются в журнал. Подобные неудачные попытки можно обнаружить по записи «Connection closed by authenticating user», но она означает отключение на этапе аутентификации, независимо от способа аутентификации — по паролю или по ключу.
Если установить уровень вербальности на VERBOSE, то в журнале можно будет найти записи о неудачных попытках входа с помощью публичного ключа следующей командой:
journalctl | grep -i 'Failed publickey for'
Подробнее об этой настройке во второй часте.
Выполнение команд на удаленном Linux сервере
$ ssh @ ''
Узнать uptime удаленного сервера
$ ssh root@192.168.1.1 'uptime'
Перезагрузить удаленный сервер
$ ssh root@192.168.1.1 'reboot'
Запуск нескольких команд через SSH
СПОСОБ 1
$ ssh @ '; ; '
Узнать Uptime и Disk Usage
$ ssh root@192.168.1.1 'uptime; df -h'
СПОСОБ 2
$ ssh @ ' | | '
Узнать Memory Usage и Load Average
$ ssh root@192.168.1.1 'free -m | cat /proc/loadavg'
СПОСОБ 3
$ ssh @ << EOF command 1 command 2 command 3 EOF
Показать версию ядра, информацию о CPU и кол-во RAM
$ ssh root@192.168.1.1 << EOF uname -a grep "model name" /proc/cpuinfo grep MemTotal /proc/meminfo EOF
Выполнение скрипта на удаленном Linux сервере
$ ssh @ 'bash -s' <
Запустить локальный скрипт ‘local_script.sh’ на удаленной машине
$ ssh root@192.168.1.1 'bash -s' < local_script.sh
Передача файлов с помощью SFTP
Навигация по удаленной и локальной файловой системе дает ограниченную пользу без возможности передачи файлов между двумя файловыми системами.
Передача удаленных файлов в локальную систему
При необходимости загрузки файлов с удаленного хоста мы можем воспользоваться следующей командой для выполнения этой задачи:
Как видите, по умолчанию команда загружает удаленный файл и сохраняет файл с тем же именем в локальной файловой системе.
Мы можем скопировать удаленный файл с другим именем, указав после команды нужное имя:
Команда также имеет несколько флагов. Например, мы можем скопировать каталог и все его содержимое с помощью рекурсивной опции:
Флаги или позволяют сохранить соответствующие права и время доступа при копировании с помощью SFTP:
Передача локальных файлов в удаленную систему
Передача файлов в удаленную систему осуществляется таким же удобным образом с помощью команды с именем «put»:
Флаги, доступные для команды , могут применяться и с командой . Чтобы скопировать всю локальную директорию, вы можете воспользоваться следующей командой:
Примечание: в настоящее время в версиях OpenSSH, предоставляемых в текущих версиях Ubuntu (начиная, по крайней мере, с версии 14.04 до версии 15.10), существует баг, который препятствует корректной работе указанной выше команды. При попытке использования команды выше для передачи данных серверу, использующему дефектную версию OpenSSH, вы получите следующую ошибку: .
Чтобы обойти эту ошибку, необходимо сначала создать каталог назначения на удаленном сервере с помощью команды . После этого команда выше должна отработать без ошибки.
Одним из хорошо знакомых инструментов, который может быть полезен при скачивании и загрузке файлов, является команда , которая работает схожим образом с используемой в командной строке версией данной инструкции. Она позволяет убедиться, что у вас в распоряжении есть достаточное количество места для передачи данных, которые вас интересуют:
Обратите внимание, что локального варианта этой команды нет, но мы можем обойти это ограничение, воспользовавшись в качестве команды. Команда перемещает нас в локальную оболочку, где можно запустить любую команду в локальной системе
Мы можем проверить использование диска с помощью следующей команды:
Команда перемещает нас в локальную оболочку, где можно запустить любую команду в локальной системе. Мы можем проверить использование диска с помощью следующей команды:
а затем
Любая другая локальная команда будет работать согласно ожиданиям. Чтобы вернуться в сеанс SFTP, введите:
Вы должны увидеть, что приглашение SFTP вернулось.
Примеры синхронизации Rsync
Дальше давайте рассмотрим использование rsync, примеры синхронизации.
1. Копирование и синхронизация файлов на локальном компьютере
Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование rsync для синхронизации файла на локальном компьютере:
Указав опцию —progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:
2. Синхронизация папок на локальной машине
Синхронизация папок rsync выполняется так же просто, как и файлов:
Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:
3. Синхронизация с удаленным сервером
Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:
По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:
Точно также можно синхронизировать файлы с rsync из удаленного сервера:
Адрес удаленного сервера записывается в таком формате:
имя_пользователя@адрес_машины/папка/на/удаленной_машине
Синхронизация папок rsync будет выполняться на стандартном порту.
4. Синхронизация файлов по SSH
Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.
Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так:
Если вы используете другой порт для ssh, то здесь его можно указать:
А теперь передадим данные на тот же сервер:
6. Синхронизация не всех файлов в rsync
Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями.
Например, скопируем все файлы, начинающиеся на букву R:
7. Удаление при синхронизации
Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция —delete.
Например:
Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.
8. Максимальный размер файлов
Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:
9. Удаление исходных файлов
Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:
Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.
10. Режим симуляции rsync
Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:
11. Ограничить скорость передачи
Вы можете ограничить использование пропускной способности сети с помощью опции —bwlimit:
Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:
12. Автоматическая синхронизация папок rsync
Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.
Создаем ключ:
Загружаем ключ на сервер к с которым собираемся синхронизироваться:
Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:
rsync синхронизация каталогов будет выполняться каждый день в пять утра. Подробнее о настройке расписаний Cron можно почитать в отдельной статье.
How to Transfer Files with Rsync over SSH
4 Апреля 2020
|
Терминал
В этом руководстве мы объясним, как копировать файлы rsync через SSH.
Когда дело доходит до передачи файлов между системами в сети, пользователи Linux и Unix имеют в своем распоряжении множество инструментов.
Наиболее популярными протоколами для передачи данных являются SSH и FTP . Хотя FTP очень популярен, всегда предпочитайте использовать SSH, так как это самый безопасный способ передачи ваших файлов.
Есть специализированные инструменты для передачи файлов через SSH , такие как и , но ни один из них не обладают всеми возможностями , которые предоставляют. может использоваться для зеркалирования данных, инкрементного резервного копирования, копирования файлов между системами и так далее.
Требования
-
Утилита должна быть установлена на обоих назначения и исходных систем. Если он не установлен, вы можете установить его, используя менеджер пакетов вашего дистрибутива:
Ubuntu и Debian:
CentOS и Fedora:
-
SSH доступ к удаленному компьютеру.
-
Пользователь, выполняющий команду, и удаленный пользователь SSH должны иметь соответствующие разрешения для чтения и записи файлов.
Использование для передачи файлов по SSH
С помощью вы можете передавать файлы и каталоги по SSH с и на удаленные серверы.
Общий синтаксис для передачи файлов с помощью следующего:
Где находится исходный каталог, целевой каталог — это удаленное имя пользователя SSH, а также удаленный хост SSH или IP-адрес.
Более новые версии rsync настроены на использование SSH в качестве удаленной оболочки по умолчанию, поэтому вы можете опустить эту опцию.
Например, для передачи одного файла из локальной системы в каталог на удаленной системе с IP-адресом вы должны выполнить:
Опция означает архивный режим , который синхронизирует каталоги рекурсивно, передача специального и блочные устройства, сохранить символические ссылки, время модификации, группы, права собственности и права доступа.
Если вы не установили пароль без пароля для удаленного компьютера, вам будет предложено ввести пароль пользователя.
Если файл существует на удаленном сервере, он будет перезаписан. Если вы хотите сохранить файл под другим именем, укажите новое имя:
Для передачи данных с удаленного на локальный компьютер используйте удаленное местоположение в качестве источника и локальное местоположение в качестве места назначения:
Передача каталогов по протоколу SSH аналогична передаче файлов.
Важно знать, что в исходных каталогах по-разному трактуется косая черта. Если исходный каталог имеет косую черту, будет копироваться только содержимое исходного каталога в целевой каталог
Если косая черта не указана, исходный каталог будет скопирован в целевой каталог.
Например, чтобы перенести локальный каталог в каталог на удаленной машине, вы должны набрать:
Используйте эту опцию, если вы хотите синхронизировать локальный и удаленный каталог. Будьте осторожны при использовании этой опции, поскольку она удалит файлы в целевом каталоге, если они не существуют в исходном каталоге.
Если SSH на удаленном хосте прослушивает порт, отличный от порта по умолчанию , укажите порт с помощью параметра. Например, если SSH прослушивает порт, вы должны использовать:
При передаче больших объемов данных рекомендуется запускать команду в сеансе экрана или использовать параметр, который указывает показывать индикатор выполнения во время передачи и сохранять частично переданные файлы:
Вы также можете прочитать , как исключить файлы или каталоги с .
SFTP в Double Commander
Double Commander, как и его прототип Total Commander, умеют работать с SFTP с помощью плагина. Но в Double Commander плагин нужно установить, прежде чем эта программа начнёт понимать SFTP.
Распаковываем скаченный архив.
Теперь открываем Double Commander, в меню переходим в «Настройки» → «Параметры» → Вкладка «Плагины» → Плагины WFX.
Нажимаем кнопку «Добавить» и указываем скаченный файл:
Сохраняем, закрываем меню настроек, на всякий случай перезапускаем Double Commander.
Теперь нажимаем на эту кнопку и затем выбираем Network:
Можно нажать <Quick connection> и ввести уже знакомый нам URI (если честно, мне просто лень расписывать данные по полям):
Можно указать целевой путь, то есть папку, которая будет открыта на сервере после подключения. Кстати, ведь его можно было указать прямо в URI (об этом чуть ниже):
Имя пользователя мы уже указали в URI, поэтому можно пропустить:
У меня для SSH настроен вход без пароля (аутентификация по ключу), поэтому ничего не ввожу:
Попадаю на удалённый хост, здесь я могу переходить по папкам, делать различные операции с файлами на удалённом компьютере в двухфайловом менеджере:
Прямо в URI можно указывать папку, которая должна быть открыта после подключения. Предположим, я хочу, чтобы открывалась папка /var/www/html, тогда URI будет иметь следующий вид:
sftp://root@192.168.1.68:22/var/www/html
В Double Commander и FileZilla можно настроить подключения, чтобы соединение с сервером происходило сразу при выборе желаемого подключения.
Ключ сервера
Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо несекьюрно).
Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа
Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить)
Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.
Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.
Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.
Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.
Копирование файлов
Передача файлов на сервер иногда может утомлять. Помимо возни с sftp и прочими странными вещами, ssh предоставляет нам команду scp, которая осуществляет копирование файла через ssh-сессию.
Обратно тоже можно:
Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения.
Возможность копировать здорово. Но хочется так, чтобы «сохранить как» — и сразу на сервер. И чтобы в графическом режиме копировать не из специальной программы, а из любой, привычной.
Удалённое исполнение кода
ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:
Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.
Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
Кстати, мы можем сделать что-то такого вида: