Копирование и запуск скрипта на удаленной машине через 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
...еще вариант:
[arcfi@arcfi-laptop ~]$ sshpass -p "$SSH_PASSWD" ssh admin@srv08 Last login: Wed Aug 29 12:08:20 2012 [admin@srv08 ~]$
или
sshpass -p "$PASSWD" ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $USER@$HOST