Копирование и запуск скрипта на удаленной машине через ssh без ввода пароля: различия между версиями
imported>Vix (Новая страница: «Задача: Скопировать файл выгрузки с файлового сервера на удалённый веб сервер и запусти…») |
imported>Vix Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 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> | ||
Далее, создаём скрипт, который будет копировать файл с выгрузкой на удалённый сервер: | Далее, создаём скрипт, который будет копировать файл с выгрузкой на удалённый сервер: | ||
Строка 50: | Строка 50: | ||
* [http://joyit.ru/administrirovanie/14-ssh.html взято тут] | * [http://joyit.ru/administrirovanie/14-ssh.html взято тут] | ||
<hr> | |||
...еще вариант: | |||
[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 |
Текущая версия от 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