Когда Вы соединяетесь с другим хостом, SSH выполняет данную команду на стороне сервера (если нет ни одного данного, это запускает оболочку), передавая все stdin/stdout/stderr потоки. ssh
управляйте концами в >
. Это означает, что вывод команды mysql перенаправляется в файл dbdump.dmp
на стороне клиента. Затем все еще на стороне клиента, архив tar создается из того файла.
При помещении целой командной строки в кавычки как предложенный Dom это будет выполнено полностью на удаленной стороне, тот способ, которым у Вас будут файлы на Вашем сервере.
В теории вещь пароля должна работать, также (так как stdin поток не перенаправляется, но просто передается), но это не сделало здесь.
Можно вставить пароль .my.cnf
(если Вы хотите дополнительную безопасность, создаете дополнительного пользователя только для резервного копирования). Можно также использовать вход в систему с открытым ключом для той учетной записи, тот способ, которым это будет работать полностью без взаимодействия.
BTW: Почему Вы создаете архив tar дампа? Если Вам только нужно сжатие, gzip
или что-то как этот совершенно достаточно.
На котором компьютере Вы хотите tar, который будет выполняться? если это находится на сервере, необходимо заключить всю строку в кавычки как: ssh user@host.com "mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp"
Если Вы не делаете, я думаю, что конец строки будет выполняться локально и не будет работать, поскольку у Вас нет dbdump файла Для 1), нет никакой проблемы. Если пароль будет необходим, то его спросят. [РЕДАКТИРОВАНИЕ] OOPS, я проверяю дважды, Вы говорите о пароле MySQL и не SSH! Я думаю однако, что это спросят [EDIT2], Просто проверяют, и это работает с кавычками: сначала пароль SSH, спрашивают, и после, пароль MySQL
У меня это сработало (после нескольких тестов):
ssh -t kom "mysql -uroot -p -e 'show databases;'"
ssh -t kom "mysql -uroot -p < /home/ling/websites/jin_test/.deploy/tmp.sql"
«Уловка» заключалась в кавычках вокруг команды.
Параметр -t позволяет выводить подсказки пароль в интерактивном режиме через удаленную оболочку.
kom здесь просто идентификатор конфигурации ssh, определенный в моем файле ~ / .ssh / config (подробнее см. здесь: https : //www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ ).