Копирование файлов по сети при помощи SCP без пароля

Стандартом де факто, среди програм, используемых для администрирования Linux, FreeBSD и других UNIX серверов является SSH. Но, помимо предоставления доступа к командной оболочке удаленного сервера, SSH предоставляет возможность передавать по сети файлы, используя защищенный канал связи - при помощи утилиты SCP. Данная утилита позволит копировать файлы на удаленные хосты не только интерактивно, но и по рассписанию, при помощи скриптов, например при создании резервных копий, синхронизации папок и так далее.

По умолчанию, при установке связи с удаленным хостом, вам потребуется ввести имя пользователя и пароль, что не подходит при автоматическом соединении с удаленным сервером - здесь нужно чтоб сеанс связи устанавливался без необходимости вводить свои учетные данные. Мысли про запись логина и пароля в открытом виде следует отметать сразу, так как это является грубейшим нарушением всех политик безопасности и, если такое делать, то зачем нужен SCP? Можно просто исползовать FTP и не думать о безопасности. Для тех-же, кто хочет делать все по правильному, разработчики SSH реализовали возможность авторизации по открытому ключу, ну а как это сделать, давайте рассмотрим далее в статье.

Как копировать файлы при помощи SCP

Итак, для получения справки по работе с программой SCP выолните команду man scp

Среди прочих параметров, обратите внимание на параметры вида:

[[user@]host1:]file1 ... [[user@]host2:]file2

Где file1 - исходный_файл, а file2 - целевой_файл. Те части параметра, которые перечислены в квадратных скобках, можно опустить, то-есть команду SCP можно сократить до вида:

scp исходный_файл целевой_файл

Что будет равносильно копированию файла в пределах локального компьютера. Также, обратите внимание, что файлы можно копировать не только между локльным и удаленным хостом, но также и между двумя удаленными хостами.

Теперь давайте разберемся как правильно написать параметры подключения:

scp имя_пользователя@адрес_сервера1:/путь/к/файлу имя_пользователя@адрес_сервера2:/путь/к/файлу

Адрес сервера можно записать как IP адрес, так и в виде URL, путь к файлу можно запискать как относительный, так и полный:

scp ~/Downloads/file1.iso alex@profhelp.com.ua:~/Desktop/file1.iso

Как видите, вместо того, чтоб писать полный путь к своей домашней директории, я написал символ ~, что равносильно написанию полного пути к моей домашней директории /home/alex. К удаленному хосту 192.168.1.101 я также подключаюсь с учетной записью alex и размещаю файл на рабочем столе: ~/Desktop/file1.iso, что равносильно написанию /home/alex/Desktop/file1.iso. Так же, вы можете скопировать файлы с удаленного хоста на локальный компьютер:

scp alex@profhelp.com.ua:~/Desktop/file1.iso ~/Downloads/file1.iso

Для того, чтоб рекурсивно скопировать содержимое директории, следует использовать ключ -r, обратите внимание на нижний регистр, это имеет значение.

После того, как мы разобрались, как работает программа SCP, давайте настроим работу без необходимости вводить пароль.

Как настроить работу SSH и SCP для работы без пароля

В основе работы SSH заложено использование асиметричного шифрования, суть которого заключается в том, что имеется пара ключей, открытый и секретный, открытый ключ может использован для того, чтоб зашифровать данные, а закрытый расшифровать. Обратное действие навыполнимо. Для генерации крипто пары, выполните команду:

ssh-keygen –t rsa

На вопрос ввода ключевой фразы ничего не вводите, а нажмите энтер два раза(второй раз для подтверждения). В результате выполнения команды, в директории ~/.ssh/ появятся два файла:

  • Секретный ключ id_rsa. Следует хранить его исключительно на локальном компьютере, подальше от посторонних глаз.
  • Открытый ключ id_rsa.pub. Этот файл можно передавать кому угодно, это никак не скажется на вашей безопасноти.

Суть настройки авторизации по открытому ключу заключается в том, что на удаленном сервере, в файле ~/.ssh/authorized_keys должен находиться ваш открытый ключ. Для копирования открытого ключа на удаленный сервер выполните команду:

scp ~/.ssh/id_rsa.pub alex@profhelp.com.ua:~/.ssh/authorized_keys

В этот раз пришлось ввести пароль, но теперь при следующем входе на удаленный сервер с именем пользователя, для которого производилась настройка авторизации, пароль запрашиваться не будет.

Еще одно замечание. если на удаленном сервере уже имеется файл ~/.ssh/authorized_keys, то вместо выполнения команды, указанной выше, следует выполнить команды следующего вида:

scp alex@profhelp.com.ua:~/.ssh/authorized_keys ~/.ssh/authorized_keys_tmp
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys_tmp
scp ~/.ssh/authorized_keys_tmp alex@profhelp.com.ua:~/.ssh/authorized_keys

Выполнение этих команд добавит ваш открытый ключ в конец файла ~/.ssh/authorized_keys и снова выгрузит его на удаленный сервер.

 

 

Тэги: 

There are 2 Comments

А разве в последней строке мы не "~/.ssh/authorized_keys_tmp" должны копировать на удаленный сервер?

спасибо! поправил :)
 

Твори, или уйди в сторону и не мешай творить другим.
Делись своим опытом и знаниями, ибо в могиле они тебе вряд-ли пригодятся.

Добавить комментарий

You must have Javascript enabled to use this form.