Содержание
- 1 Using telnet is not recommended
- 2 SFTP в FileZilla
- 3 Настройка сервера Rsync
- 4 Простое копирование ssh ключей между серверами c использованием утилиты ssh-copy-id
- 5 Как пользоваться PuTTY
- 6 Как установить OpenSSH
- 7 Сетевая файловая система SSHFS
- 8 Передача файлов по сети Linux
- 9 Как в curl работать с протоколами SCP и SFTP
- 10 Конфигурационные файлы клиента SSH
- 11 Примеры синхронизации Rsync
- 12 8.7. Как скопировать файлы с сервера на сервер по протоколу SSH
- 13 FTPS
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.
SFTP в FileZilla
Использование программы элементарное — нужно указать хост (IP), имя пользователя и порт. Предположим, я хочу подключиться к хосту 192.168.1.68, под пользователем root. В качестве порта нужно указать порт, на котором работает SSH на этом удалённом сервере, по умолчанию это 22.
Можно просто ввести данные в поля, но мне нравится составлять такие URI адреса, которые начинаются на sftp:// — дело в том, что они нам ещё пригодяться!
Итак, я составил адрес
sftp://root@192.168.1.68:22
вставляю его в поле «Хост» и нажимаю кнопку «Быстрое подключение»:
Если вы когда-либо работали с SSH, то вы знаете, что перед каждым первым подключением к новому хосту, нужно согласиться добавить его в список известных хостов:
В этом нет ничего страшного — это сделано для дополнительной защиты (если кто-то подменит хост, то мы об этом узнаем сразу при попытке подключения).
Нажимаем «ОК» и получаем список файлов директории, к которой мы подключились:
Теперь мы можем бродить по каталогам, скачивать файлы с удалённого компьютера и закачивать туда файлы с локальной машины.
Настройка сервера Rsync
Как вы понимаете, нельзя просто так взять и закинуть на первую попавшуюся машину файлы без установки на нее специального программного обеспечения. На удаленной машине должен быть установлен и настроен RSYNC, SSH, Samba или FTP сервер, с помощью которого Rsync сможет авторизоваться на машине и передавать туда файлы.
Рассмотрим минимальную настройку сервера rsync, для того чтобы могло быть выполнено копирование файлов rsync. Он позволит нам не только синхронизировать файлы на машину, но и получать их от туда.
Сначала создайте конфигурационный файл со следующим содержимым:
Здесь мы задаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с ip адреса (192.168.56.1) и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, от которых будет запущен демон. Лучше не использовать root, а указать пользователя nobody и выдать ему права на ту папку, в которую будет выполняться синхронизация каталогов rsync.
Настройка rsync завершена, остается сохранить файл, запустить сервер rsync и добавить его в автозагрузку:
Сервер будет предоставлять доступ к файлам без запроса пароля.
Простое копирование ssh ключей между серверами c использованием утилиты ssh-copy-id
Традиционно администраторы решают задачу копирования ssh ключей между серверами путем копирования содержимого файла /root/.ssh/id_rsa.pub с сервера server1 на server2 в файл /root/.ssh/authorized_keys. Копируют обычно из одного терминала в другой, но есть более изящное решение — это использование утилиты ssh-copy-id, которая позволяет скопировать содержимое id_rsa.pub сервера источник (в нашем случае server1) на сервер приемник (server2) в нужный нам authorized_keys не открывая консоль сервера приемника (server2).
Исходные данные: 2 сервера с Debian 8 (server1 и server2).Задача: Организовать вход по ssh ключу с сервера server1 на server2 с правами root.
Итак сделаем все по порядку:
1. Генерируем публичный открытый и закрытый ключи, под пользователем root на server1:
ssh-keygen -t rsa
Если на сервере уже есть эти ключи, то он выдаст предупреждение, где нужно будет либо подтвердить замену старых ключей либо отказаться.
Мы создаем ключи впервые, поэтому предупреждения не будет, будет выведена примерно такая информация:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <-- ENTER Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <-- ENTER Enter same passphrase again: <-- ENTER Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub.
Вы можете защитить приватный ключ паролем и тогда чтобы попасть на сервер server2 по ssh ключу нужно будет ввести этот пароль, я настоятельно рекомендую для доступа с уровнем root ввести пароль на приватный ключ.
Ключи сгенерированы, мы можем проверить под пользователем root выполнив команду
cat ~/.ssh/id_rsa.pub
В ответ увидим примерно:
ssh-rsa AAAAB3Nz.....ywWmpl
Теперь нужно передать публичный ключ id_rsa.pub пользователя root на server2, для этого на server1 выполняем:
ssh-copy-id -i ~/.ssh/id_rsa.pub
Вводим пароль root от сервера server2 и ключ будет передан и записан в нужный файл authorized_keys
Важное уточнение: Чтобы передать публичный ключ на server2 под root нужно чтобы пользователю root было разрешен вход по ssh на server2, обычно при базовой установке Debian/Ubuntu вход под root по ssh разрешен, это настраивается директивой PermitRootLogin в файле /etc/ssh/sshd_config
PermitRootLogin yes — Вход под root по ssh разрешен.
PermitRootLogin no — Вход под root по ssh запрещен.
PermitRootLogin without-password — Вход под root по ssh разрешен только по ssh ключам.
PermitRootLogin forced-commands-only — Вход под root по ssh разрешен только по ssh ключам и только для выполнения заранее определенной команды, сама команда прописывается в /root/.ssh/authorized_keys в формате:
command="rsync" ssh-rsa AAAAB3N…….
После изменения PermitRootLogin не забудьте перезапустить службу sshd командой:
service sshd restart
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Как пользоваться 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 для передачи файлов.
Как установить OpenSSH
Для некоторых конфигураций служба OpenSSH установлена и включена по умолчанию. Как правило, это относится к системам, к которым затруднительно получить доступ иным способом, кроме как по SSH. Например, на хостингах VPS (виртуальных частных серверов) устанавливаемые системы практически всегда даже в минимальной конфигурации уже имеют установленную и запущенную службу SSH, поэтому после развёртывания нового сервера, клиенту достаточно подключиться используя присланные учётные данные.
В образах для ARM компьютеров, которые зачастую не имеют дисплея, как правило служба OpenSSH уже установлена и запущена.
В Debain и производных (Kali Linux, Linux Mint, Ubuntu), программы OpenSSH можно установить по отдельности, например, имеются пакеты для клиента и для сервера openssh-client и openssh-server. Либо можно установить метапакет ssh, который содержит и клиентскую, и серверную часть.
sudo apt install ssh
В Arch Linux клиент и сервер OpenSSH собраны в один пакет. Для установки OpenSSH в Arch Linux выполните:
sudo pacman -S openssh
В других дистрибутивах Linux поищите пакет openssh или ssh.
Сетевая файловая система SSHFS
В разделе «SSH (ч.5): Копирование файлов с помощью scp и sftp» уже рассмотрены способы, с помощью которых можно копировать данные с удалённым сервером. В том числе показано как интегрировать доступ к файлам по SSH через популярные файловые менеджеры. При всей простоте описанных способов, у них есть недостаток — он работает только в приложениях, которые поддерживают протокол SFTP.
Имеется более универсальный вариант, который является также весьма простым. Этот способ требует установки двух дополнительных пакетов:
- sshfs — позволяет монтировать удалённую файловую систему используя SFTP. Говоря простым языком, файлы удалённого сервера будут как будто бы частью вашей файловой системы. Следовательно, любы приложения смогут с ними работать.
- fuse — FUSE (Filesystem in Userspace), то есть файловая система в пространстве пользователя. Является интерфейсом к файловой системе, позволяет монтировать файловую систему с правами обычного пользователя.
Установка необходимых пакетов в Debian, Linux Mint, Ubuntu, Kali Linux и их производных:
sudo apt install sshfs fuse
Установка необходимых пакетов в Arch Linux, BlackArch и их производных:
sudo pacman -S sshfs fuse
После установки пакетов, создайте папку, куда будет монтироваться удалённая файловая система — это должна быть папка, к которой у вас есть доступ без повышенных привилегий, к примеру:
mkdir -p Downloads/ssh
Для монтирования нужно запустить команду вида:
sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ
Если нужно указать порт, то используйте опцию -p в конце команды.
К примеру, мне нужно смонтировать директорию /root хоста 185.117.153.79 где я хочу выполнить вход от пользователя root; при этом на локальной системе я хочу выполнить монтирование в папку Downloads/ssh; на удалённой системе SSH работает на порту 2222, тогда моя команда будет такой:
sshfs root@185.117.153.79:/root Downloads/ssh -p 2222
Теперь файлы папки /root хоста 185.117.153.79 будут доступны в Downloads/ssh на локальном компьютере
Обратите внимание, что команда sshfs не потребовала sudo.. Для автоматизации, можно настроить вход на SSH по ключу (без пароля), и сохранить команду монтирования с sshfs в файл/скрипт для быстрого подключения
Для автоматизации, можно настроить вход на SSH по ключу (без пароля), и сохранить команду монтирования с sshfs в файл/скрипт для быстрого подключения.
Передача файлов по сети Linux
1. Утилита nc
Этот способ отлично подойдет, если вам нужно передать один или несколько файлов и вы не хотите устанавливать никаких новых программ в систему. Утилита nc или netcat позволяет создавать tcp и unix сокеты в системе. По сути, это туннели, через которые мы можем передать любые данные, в том числе и файлы.
Утилита уже предустановлена, так что ничего дополнительно ставить не придется, нужно только знать IP адреса компьютеров в сети. Сначала создаем слушающий сокет на компьютере, все поступившие на него данные сразу пишем в файл:
Здесь опция -p задает порт, можно брать привольное значение, только чтобы совпадало в обоих командах. Теперь отправляем файл из другого компьютера:
Тут мы указываем тот же порт и ip компьютера, где был запущен слушающий сокет — 192.168.0.101. Убедитесь, что Firewall не мешает подключению к выбранному порту иначе ничего не получится.
Мы можем передавать не только файлы, но и папки. Передача может быть выполнена в обоих направлениях, теперь отправим не на сокет, и от сокета:
И принимаем отравленные данные на другом компьютере:
2. Передача файлов ssh
Передача файлов по ssh Linux — это самый быстрый и удобный способ обмена файлами. Достаточно, чтобы на компьютере была запущена служба SSH и у вас был к ней доступ. Затем с помощью утилиты scp туда можно передать любой, файл, это быстро и удобно, а ещё вы можете выбрать папку, в которую его надо сохранить. Допустим, вам надо передать файл с именем ~/file.txt на компьютер с IP адресом 192.168.0.101, тогда используйте такую команду:
Утилита загрузит файл прямо в домашнюю папку на удалённом компьютере и вы сможете выполнять с ним действия по SSH. Если надо передать все файлы из папки можно использовать опцию -r:
Читайте более подробно про утилиту scp в отдельной статье.
3. Передача файлов по FTP
Не очень удобный и очень медленный способ передачи файлов по сети. Хорошо работает для больших файлов, но большое количество мелких файлов будут передаваться очень долго. На одном компьютере должен быть развернут FTP сервер, а на другом можно использовать графический FTP клиент FileZilla для подключения и передачи файлов.
4. Как передать файл в rsync
Утилита rsync тоже использует для передачи файлов SSH, однако она позволяет передавать целые папки, а также следить за состоянием файлов и если на удалённом компьютере такой файл уже есть, то он передаваться не будет. Таким образом можно копировать только измененные файлы и удобно передавать целые папки. Для примера возьмем тот же компьютер 192.168.0.101 и папку ~/files:
Мы записываем все файлы из папки ~/files в папку /home/root, а также получаем возможность синхронизировать их. Подробнее про rsync читайте в отдельной статье.
5. Сервер NFS
Ещё один способ передачи файлов между Linux серверами — это NFS. На одном из серверов разворачивается NFS сервер, а на другом, монтируется удаленная NFS папка в обычную файловую систему, после чего она становится частью файловой системы Linux и туда уже можно копировать файлы так, как будто это на той же машине. Просто и удобно, но надо настраивать NFS и ещё один минус по сравнению с FTP, у NFS нет возможности настроить простую авторизацию по паролю, можно ограничить монтирование только по IP адресу что не всегда удобно.
6. Сервер Samba
Передавать файлы в Windows на Linux и обратно может помочь удалённый доступ с помощью Samba сервера. Если развернуть сервер Samba на Linux машине, то к нему можно будет подключится из Windows и видеть все файлы в общей папке. Samba — не очень хорошее решение, так как могут возникнуть проблемы с файлами больше 1 Гб, передающимися очень долго, но для обмена файлами между Windows и Linux довольно неплохое решение, тем более, что обмен файлами выполняется через стандартный файловый менеджер.
7. KDE-Connect
Для обмена файлами между компьютером Linux и Android можно использовать программу KDE-Connect. У неё есть приложение для Android, она встроена в окружение KDE, а для Gnome есть расширение GSConnect. Утилита позволяет передавать файлы на компьютер прямо с телефона, а также монтировать общую папку, в которую можно скидывать как файлы на компьютере, так и файлы на телефоне. Очень удобно. Читайте подробнее в статье про настройку KDE-Connect.
Как в curl работать с протоколами SCP и SFTP
В отличие от всех рассмотренных ранее, cURL — это программа с интерфейсом командной строки. Но всё равно рассмотрим и вариант с cURL — возможно, кому-то пригодиться.
На мой взгляд, работать с протоколами SCP и SFTP в командной строке удобнее через родные утилиты, поэтому я бы в первую очередь порекомендовал изучить «SSH (ч.5): Копирование файлов с помощью scp и sftp» — там подробно описано как пользоваться этими программами.
cURL и SCP
Протокол SCP предназначен в первую очередь для скачивания и закачки файлов. Для скачивания используется команда вида:
curl -k scp://ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ:ПОРТ/ПУТЬ/ДО/ФАЙЛА
Пример команды:
curl -k scp://root@192.168.1.68:22/root/bin/oneshot.py
Файл oneshot.py из папки /root/bin/ будет скачен в текущую рабочую директорию с исходным именем. Чтобы сохранить файл в другое место и/или с другим именем, добавьте опцию -o, —output <ФАЙЛ> — в качестве <ФАЙЛ> укажите путь в локальной системе.
Мы используем опцию -k которая предназначена для разрешения небезопасных соединений, то есть когда невозможно валидировать (проверить) ключи. Ключи для SSH генерируются пользователями, поэтому проверить их с помощью третьей стороны невозможно. При этом данные соединения не стоит считать небезопасными — они такие же, как и при подключении по SSH, то есть надёжные.
Если приватный ключ для подключения находится по другому пути, то используйте опцию —key ~/.ssh/id_rsa. В современных версиях cURL указывать публичный ключ не нужно — программа сама извлечёт его из приватного ключа. Если вход по ключу не настроен, то используйте опцию —user «testuser:testpassword» или -u user.
Для закачки файла на удалённый сервер используйте опцию -T, —upload-file <ФАЙЛ>, где вместо <ФАЙЛ> укажите файл, который нужно выгрузить. Пример команды:
curl -k -T /home/mial/banner.txt scp://root@192.168.1.68:22/root/banner.txt
cURL и SFTP
При работе с протоколом SFTP, также применяются опции:
- -k (разрешить подключения при неудачной валидации ключа)
- —key ~/.ssh/id_rsa — указать другое расположение приватного ключа
- —user «testuser:testpassword» или -u user — на случай если не настроен вход по ключу
- -T, —upload-file <ФАЙЛ> для указания файла выгрузки
Для листинга списка файлов файлов в директории /root/bin/ пользователя root на хосте 192.168.1.68, порт 22:
curl -k sftp://root@192.168.1.68:22/root/bin/
Выгрузка используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -T "C:\test\testfile.xml" --ftp-create-dirs
Загрузка используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/testfile.xml" --user "testuser:testpassword" -o "C:\test\testfile.xml" --ftp-create-dirs
Переименование используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -Q "-RENAME '/CurlPutTest/testfile.xml' '/CurlPutTest/testfile.xml.tmp'" --ftp-create-dirs
Удаление используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/" --user "testuser:testpassword" -Q "-RM /CurlPutTest/testfile.xml" --ftp-create-dirs
Создание директории используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/test" --user "testuser:testpassword" -Q "-MKDIR /CurlPutTest/Test" --ftp-create-dirs
Удаление директории используя curl на SFTP
curl -k "sftp://83.46.38.23:22/CurlPutTest/test" --user "testuser:testpassword" -Q "-RMDIR /CurlPutTest/Test" --ftp-create-dirs
Как можно догадаться, -Q — это опция для отправки команд на SFTP сервер. Дефис перед командой (префикс) также имеет значение (имеются разные префиксы). Нужно знать, что cURL поддерживает не все команды SFTP — подробности в документации по cURL:
man curl
Опция —ftp-create-dirs означает создать необходимую директорию, если она отсутствует (в противном случае работа cURL завершится ошибкой).
Конфигурационные файлы клиента SSH
/etc/ssh/ssh_config
Общесистемный файл конфигурации клиента SSH.
/etc/ssh/ssh_known_hosts
Общесистемный список ключей известных хостов. Этот файл должен быть подготовлен системным администратором, чтобы он содержал открытые ключи хостов всех компьютеров в организации. Этот файл должен быть читаемым для всех.
~/.ssh/
Эта директива является стандартным расположением для хранилища конфигураций и информации для аутентификаций специфичных для пользователей. Нет требования хранить всё содержимое этой директории в секрете, но рекомендуется настроить разрешения на чтение/запись/выполнения так, чтобы они были у пользователя, но не были у других.
~/.ssh/config
Это конфигурационный файл с настройками каждого пользователя. Из-за возможного злоупотребления этот файл должен иметь строгие разрешения: чтение/запись для пользователя и недоступность для записи другими.
~/.ssh/known_hosts
Содержит список ключей хостов в которые входил пользователь, но которые отсутствуют в общесистемном списке ключей известных хостов.
Примеры синхронизации 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 можно почитать в отдельной статье.
8.7. Как скопировать файлы с сервера на сервер по протоколу SSH
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/ — это исключаемый путь, относительно базы указанной в качестве источника копирования.
FTPS
FTPS (FTP + SSL) – расширение стандартного протокола передачи файлов, добавляющее в его базовый функционал создание шифрованных сессий с помощью протокола SSL (Secure Sockets Layer — уровень защищенных сокетов). На сегодняшний день защита обеспечивается его более продвинутым аналогом TLS (Transport Layer Security — защита транспортного уровня).
SSL
Протокол SSL предложен корпорацией Netscape Communications в 1996 году с целью обеспечения безопасности и секретности интернет-соединений. Протокол поддерживает аутентификацию (установление подлинности) клиента и сервера, не зависит от приложений и прозрачен для протоколов HTTP, FTP и Telnet.
Протокол SSL Handshake состоит из двух этапов: установление подлинности сервера и необязательное установление подлинности клиента. На первом этапе сервер в ответ на запрос клиента посылает свой сертификат и параметры шифрования. Затем клиент генерирует мастер-ключ, зашифровывает его открытым ключом сервера и отсылает серверу. Сервер расшифровывает мастер-ключ своим частным ключом и подтверждает свою подлинность клиенту, возвращая ему сообщение, заверенное мастером-ключом клиента.
Последующие данные шифруются и заверяются ключами, полученными на основе этого мастера-ключа. На втором этапе, который не является обязательным, сервер посылает запрос клиенту, а клиент подтверждает серверу свою подлинность, возвращая запрос с собственной цифровой подписью и сертификат открытого ключа.
SSL поддерживает разнообразные криптографические алгоритмы. В ходе установления связи используется криптосистема открытого ключа RSA. После обмена ключами используется много разных шифров: RC2, RC4, IDEA, DES и TripleDES. Также используется MD5 — алгоритм создания дайджеста сообщений. Синтаксис сертификатов открытого ключа описан в X.509.
Одним из немаловажных преимуществ SSL, является его полная программно-платформенная независимость. Протокол разработан на принципах переносимости, и идеология его построения, не зависит, от тех приложений, в составе которых он используется
Помимо этого, важно и то, что поверх протокола SSL, могут прозрачно накладываться и другие протоколы; либо для еще большего увеличения степени защиты целевых информационных потоков, либо, для адаптации криптографических способностей SSL под какую-нибудь другую, вполне определенную задачу
SSL-подключение
Предоставляемый SSL безопасный канал обладает тремя основными свойствами:
- Канал является частным. Шифрование используется для всех сообщений после простого диалога, который служит для определения секретного ключа.
- Канал аутентифицирован. Серверная сторона диалога всегда аутентифицируется, в то время как клиентская — аутентифицируется опционально.
- Канал надежен. Транспортировка сообщений включает в себя проверку целостности (с привлечением MAC).
Особенности FTPS
Существуют две реализации FTPS, использующие различные методы предоставления безопасности:
- Неявный метод предполагает использование стандартного протокола SSL с установлением сессии перед отправкой данных, что, в свою очередь, нарушает совместимость с обычным FTP клиентами и серверами. Для обратной совместимости с клиентами, которые не поддерживают FTPS, для контрольного соединения используется TCP-порт 990, а для передачи данных — 989. Это позволяет сохранить стандартный порт 21 для протокола FTP. Данный метод признан устаревшим.
- Явный – намного более удобен, так как использует команды стандартного FTP, но при ответе шифрует данные, что позволяет использовать одно и тоже управляющее соединение как для FTP, так и для FTPS. Клиент должен явно запросить защищенную передачу данных у сервера, а после утвердить способ шифрования. Если клиент не запросит защищенную передачу, FTPS сервер вправе как сохранить, так и закрыть незащищенное соединение. Механизм согласования идентификации и защиты данных был добавлен под RFC 2228 который включает в себя новую FTP команду AUTH. Хотя этот стандарт не определяет явно механизмы защиты, он определяет, что защищенное соединение должен инициировать клиент с помощью описанного выше алгоритма. Если защищенные соединения не поддерживаются сервером, должен быть возвращен код ошибки 504. FTPS клиенты могут получить информацию о поддерживаемых сервером протоколах защиты при помощи команды FEAT, тем не менее сервер не обязан разглашать то, какие уровни безопасности он поддерживает. Наиболее распространены FTPS команды AUTH TLS и AUTH SSL, обеспечивающие защиту TLS и SSL соответственно.