Как использовать команду SCP в UNIX без пароля

Обновлено Обновлено: Опубликовано Опубликовано:

Данный пример приведен на разных UNIX-системах — копирование файла с FreeBSD на CentOS. Использовать его можно в различных средах.

Копирование данных утилитой scp выполняется по протоколу SSH. Таким образом, для беспарольного копирования необходимо разрешить подключение по SSH без пароля. Это делается с помощью сертификата безопасности.

Генерация нового ключа и настройка беспарольного копирования

Для безопасной передачи данных между системами UNIX нужно сгенерировать закрытый и открытый ключи на одном компьютере и передать открытый на второй. Это делается по нижеописанному алгоритму.

На первом компьютере, с которого планируется копировать данные (FreeBSD) генерируем ключи:

ssh-keygen -t rsa

После нажатия Enter система попросит ввести параметры размещения ключа и пароль. Ничего не меняем, нажимая ввод и соглашаясь со значениями по умолчанию.

* в моем примере, генерация ключа проходила под учетной записью root и публичный ключ был создан по пути /root/.ssh/id_rsa.pub

Теперь скопируем публичный ключ на второй компьютер (CentOS):

scp /root/.ssh/id_rsa.pub dmosk@server2:/home/dmosk/.ssh/authorized_keys

* как видно, мы копируем сгенерированный ключ на компьютер server2, подключившись под учетной записью dmosk и размещаем его в домашнюю директорию этого пользователя под новым именем authorized_keys. Каталог /home/dmosk/.ssh должен быть создан на втором компьютере заранее командой mkdir.

После ввода команды система запросит пароль для учетной записи dmosk на компьютере server2 и скопирует ключ.

В системах, где работает SELinux (по умолчанию, в системах на базе RPM), необходимо сбросить контекст безопасности для созданного файла:

restorecon -FRv /home/dmosk/.ssh

На втором сервере (CentOS или к которому будем подключаться и копировать на него данные) проверяем настройки ssh:

vi /etc/ssh/sshd_config

Мы должны найти строку:

AuthorizedKeysFile     .ssh/authorized_keys

Если данной строки нет или опция AuthorizedKeysFile имеет другое значение, нужно привести конфигурацию к данному виду. После перезапустить службу ssh:

systemctl restart sshd

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

scp /tmp/backup.tar.gz dmosk@server2:/backup/

Перенос закрытого ключа на другой компьютер

В случае, если мы хотим использовать сгенерированный ключ на другом компьютере, переносим файлы id_rsa и id_rsa.pub. Например, у нас есть третий компьютер с Ubuntu (server3) и мы хотим теперь с него копировать файлы на CentOS без пароля. Заходим на компьютер с FreeBSD и копируем ключи:

scp /root/.ssh/{id_rsa,id_rsa.pub} root@server3:/root/.ssh/

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

Теперь с server3 можно копировать данные без пароля на server2:

scp /tmp/backup.tar.gz dmosk@server2:/backup/

Возможные ошибки

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6f:e6:56:85:b6:be:52:3d:8c:5e:3a:8e:68:e2:0e:16.
Please contact your system administrator.
Add correct host key in /home/dmosk/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/dmosk/.ssh/known_hosts:6
RSA host key for 192.168.0.18 has changed and you have requested strict checking.

Причина: произошла смена ключа SSH и так как, на компьютере в файле ~/.ssh/known_hosts находится старый ключ, система не позволяет использовать сертификат в целях безопасности.

Решение: открываем файл с базой ключей:

vi ~/.ssh/known_hosts

Находим строчку с нашим удаленным компьютером, для которого получаем ошибку и удаляем ее.

# CentOS # FreeBSD # Linux # UNIX # Безопасность
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет