SSH远程执行带有特殊字符的命令

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 执行带有特殊字符的命令?

答案1

您可以尝试转义传递给 ssh 的命令中的特殊字符。在这种情况下,您的

p$ssw0rd

变成

p\$ssw0rd

由于您使用的 shell 可能会以不同的方式解释“\”字符,我无法保证 100% 解决您的问题,但尝试一下也无妨。

答案2

为什么你不直接在选项文件中指定你的凭证?

编辑~/.my.cnf并添加如下内容:

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

确保您运行$ chmod 600 ~/.my.cnf以限制对该文件的访问。

那么你就不需要在 SSH 命令中指定这些了。这可以说是一种更安全的方法,因为用户名/密码不会出现在你的~/.bash_history 或者正在运行的进程列表(所有用户都可以查看)。

相关内容