У меня проблема с выполнением удаленной команды через 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
или список запущенных процессов (который виден всем пользователям).