Назад | Перейти на главную страницу

Команда удаленного выполнения SSH со специальными символами

У меня проблема с выполнением удаленной команды через SSH со специальным символом. Я пытаюсь экспортировать базу данных из MySQL для резервного копирования. Это команда в моем локальном скрипте:

#!/bin/bash
ssh user@host "mysqldump -u dbname -p'p$ssw0rd' --lock-tables=false dbname > ~/sites/mysite/backup/dbname.sql"

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

mysqldump: Got error: 1045: Access denied for user 'dbname'@'localhost' (using password: YES) when trying to connect

Однако, когда я вручную подключаюсь к машине и выполняю команду, она выполняется нормально. У меня такое впечатление, что при выполнении команды через ssh что-то теряется и пароль не приходит.

Как я могу выполнить свою команду со специальными символами через ssh?

Вы можете попробовать экранировать специальные символы в команде, которую вы передаете ssh. В этом случае ваш

p $ ssw0rd

становится

p \ $ ssw0rd

Поскольку оболочка, которую вы используете, может интерпретировать символ "\" по-разному, я не могу поручиться за 100% решение для вашего случая, но попробовать не помешает.

Почему бы вам просто не указать свои учетные данные в файле параметров?

редактировать ~/.my.cnf и добавьте что-то вроде этого:

[mysql]
user = 'dbname'
password = 'p$ssw0rd'

Убедитесь, что вы бежите $ chmod 600 ~/.my.cnf чтобы ограничить доступ к этому файлу.

Тогда вам не нужно указывать их в вашей команде SSH. В любом случае это, возможно, более безопасный способ, поскольку имена пользователей / пароли не отображаются ни в вашем ~/.bash_history или список запущенных процессов (который виден всем пользователям).