Копирование и запуск скрипта на удаленной машине через ssh без ввода пароля

ssh

Задача:
Скопировать файл выгрузки с файлового сервера на удалённый веб сервер и запустить на нём php скрипт обработки данного файла.

Реализуется следующим образом:

 

Сначала настраиваем подключение по ssh без пароля:

Создаём ключ:
ssh-keygen -t rsa
На запрос ввести путь для сохранения ключа "Enter file in which to save the key (/home/<имя_пользователя>/.ssh/id_rsa):" нажимаем Enter
На запрос ввести секретную фраз "Enter passphrase (empty for no passphrase):" нажимаем Enter (Если её ввести, то при подключении вместо пароля будет спрашиваться секретная фраз для разблокировки ключа).
На запрос повторить ввод секретной фразы "Enter same passphrase again:" нажимаем Enter.

Ключ будет создан в директории /home/<имя_пользователя>/.ssh/id_rsa, там же будет лежать публичный ключ /home/<имя_пользователя>/.ssh/id_rsa.pub который необходимо поместить на удалённый сервер при помощи команды:
ssh-copy-id -i /home/<имя_пользователя>/.ssh/id_rsa.pub имя_пользователя_удалённого_сервера@ip_адрес_сервера
Параметр -i позволяет задать путь к публичному ключю.
Вместо имя_пользователя_удалённого_сервера необходимо поставить имя пользователя удалённого сервера, от имени которого планируется выполнять операции на удалённом сервере.
Вместо ip_адрес_сервера можно использовать dns имя сервера.

Для проверки выполним:
ssh <имя_пользователя_удалённого_сервера>@ip_адрес_сервера uptime
Команда выведет время работы с системы.
Если команда возвращает данные, и не спрашивает пароль, то всё настроено верно. Теперь аутентификация пользователя происходит по публичному ключу, и пароль не будет спрашиваться при выполнении команд: ssh, sftp, scp.

Далее, создаём скрипт, который будет копировать файл с выгрузкой на удалённый сервер:
nano -u /usr/bin/export.sh
#!/bin/bash
#Дата для подстановки к имени файла
DATE=`date +%F_%H:%M`
#Копируем файл на удалённую машину
scp <исходная_директория>/<файл> <ip_адрес_удалённого_сервера>.<расширение>:<конечная_директория>_$DATE.<расширение>
#Запускаем php скрипт на удалённой машине
ssh <ip_адрес_удалённого_сервера> "php -f <путь_к_скрипту>/<файл>.php <необходимые_параметры>
#Очищаем файл экспорта
echo > <исходная_директория>/<файл>

Сделаем скрипт запускаемым:
cmod +x /usr/bin/export.sh

Запускаем скрипт:
/usr/bin/./export.sh
Проверяем наличие файла и исполнение скрипта php на удалённом сервере.

Теперь, можно поставить выполнение скрипта в cron (планировщик заданий):
crontab -e
# m h dom mon dow user command
15 0 * * * /usr/bin/export_payment.sh

Скрипт будет выполняться ежедневно в 00:15

Удачно пошаманить!

Комментарии:

Разработано для Disqus