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

Luk*_*uke 5 mysql remote-access ssh

我在通过包含特殊字符的 SSH 执行远程命令时遇到问题。我正在尝试从 MySQL 导出数据库以进行备份。这是我在本地脚本中的命令:

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

如您所见,我在密码周围使用了 ' 字符。当我执行此脚本时,出现以下错误:

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

但是,当我手动 ssh 进入机器并执行命令时,它执行得很好。我的印象是通过 ssh 执行命令会丢失一些东西并且密码没有通过。

如何通过 ssh 执行带有特殊字符的命令?

小智 6

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

p$ssw0rd

变成

p\$ssw0rd

由于您使用的外壳可能会以不同的方式解释“\”字符,因此我不能保证 100% 解决您的情况,但尝试不会有什么坏处。