我在通过具有特殊字符的 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 执行带有特殊字符的命令?
您可以尝试转义传递给 ssh 的命令中的特殊字符。在这种情况下你的
p$ssw0rd
成为
p\$ssw0rd
由于您使用的 shell 可能会以不同方式解释“\”字符,因此我不能保证 100% 解决您的问题,但尝试一下也无妨。
为什么不在选项文件中指定您的凭据?
编辑
~/.my.cnf
并添加如下内容:确保运行
$ chmod 600 ~/.my.cnf
以限制对该文件的访问。然后你不需要在你的 SSH 命令中指定那些。无论如何,这可以说是一种更安全的做事方式,因为用户名/密码不会出现在您
~/.bash_history
或正在运行的进程列表中(所有用户都可以看到)。