Запустите удаленную команду Mysql с помощью сценария оболочки

0

Я пытаюсь запустить команду ssh в своем сценарии оболочки, который автоматически создаст базу данных, пользователя, пароль и т.д. На удаленном сервере:

password='date +%s|sha256sum|base64|head -c 32'
read -p "Enter staging folder name... e.g. xxxxxxxx:   " stagingdirectory
echo $stagingdirectory
read -p "Give the name for the database (this will be used in mysql)" dbname
echo $dbname
read -p "Give the name of the user for the database (this will be used in mysql)" dbuser
echo $dbuser

sqlstatement="mysql -uXXXXXXX -pXXXXXXXX -hXXXXXXXX -e "
sqlstatement+='"CREATE DATABASE IF NOT EXISTS $dbname;CREATE USER $dbuser@'%' IDENTIFIED BY '$password';GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@'%';FLUSH PRIVILEGES;"'

echo $sqlstatement
ssh -A [email protected] -e "$sqlstatement"

Когда я пытаюсь запустить эту команду, я получаю эту ошибку:

Это то, что возвращается (я заменил фактические значения на XXXX):

Плохой escape-символ 'mysql -udbadmin -pXXXXX -hXXXXX -e "СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ $ dbname; СОЗДАТЬ ПОЛЬЗОВАТЕЛЬ $ dbuser @% ИДЕНТИФИЦИРОВАНО XXXXXX; ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА $ dbname. * TO $ dbuser @%;; ".

Я думаю, это связано с тем, что мой SQL-оператор и строки ускользают.

Теги:

1 ответ

2
Лучший ответ

Попробуйте изменить линию,

ssh -A [email protected] -e "$sqlstatement"

в

ssh -A [email protected] "$sqlstatement"

Из руководства по ssh, см. Ниже

-e escape_char

Устанавливает escape-символ для сеансов с pty (по умолчанию: '~). Эквивалентный символ распознается только в начале строки. Управляющий символ, за которым следует точка ('.), Закрывает соединение; а затем control-Z приостанавливает соединение; и после этого сам отправляет активатора char- один раз. Установка символа в "none" отключает любые экраны и делает сеанс полностью прозрачным.

Здесь, в вашем примере, ssh не получает действительный escape-символ, и вам не нужен ни один из них

Ещё вопросы

Сообщество Overcoder
Наверх
Меню