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

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


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


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


Далее, создаём скрипт, который будет копировать файл с выгрузкой на удалённый сервер:
Далее, создаём скрипт, который будет копировать файл с выгрузкой на удалённый сервер:
Строка 56: Строка 56:
  Last login: Wed Aug 29 12:08:20 2012
  Last login: Wed Aug 29 12:08:20 2012
  [admin@srv08 ~]$
  [admin@srv08 ~]$
или
sshpass -p "$PASSWD" ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $USER@$HOST

Текущая версия от 16:41, 15 ноября 2015

Задача: Скопировать файл выгрузки с файлового сервера на удалённый веб сервер и запустить на нём 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