我一直在阅读这里已经提出的很多问题,但是,不知何故,没有什么对我有用。我有一个 bash 脚本,我必须在其中发送在远程机器上转储数据库的密码,所以它就像:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database | gzip -c > my_database.sql.gz
Run Code Online (Sandbox Code Playgroud)
现在事情是这个密码有各种特殊字符:
#8111*@uu(
如果我直接在应使用单引号内的密码运行上面的命令,那么它就可以工作:即。
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database | gzip -c > my_database.sql.gz
Run Code Online (Sandbox Code Playgroud)
如果没有单引号,我会在结尾处出现 '(' 错误。
我还尝试像这样转义密码中的字符:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database | gzip -c > my_database.sql.gz
Run Code Online (Sandbox Code Playgroud)
然后它给出访问被拒绝的错误。
我也尝试使用“源”即。将密码保存在另一个文件中:
文件pass.cre
MYPASSWORD='#8111*@uu('
Run Code Online (Sandbox Code Playgroud)
然后将该文件包含在 bash 脚本中:
!/bin/sh
source pass.cre
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p$MYPASSWORD my_database | gzip -c > my_database.sql.gz
Run Code Online (Sandbox Code Playgroud)
它似乎是从文件中读取 $MYPASSWORD …
好吧,最近我一直面临着奇怪的行为。我有一个小的 bash 脚本,它只是远程获取 mysql 转储,然后将数据存储在服务器本身上,然后再同步到备份服务器。
#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost "mysqldump -u db_user -pSomePass mydb" | gzip -c > /sql/mybackup.sql.gz
Run Code Online (Sandbox Code Playgroud)
但是我看到文件是在 /sql 下的本地服务器上创建的,而不是在远程服务器上创建的。
这是否意味着 mysqldump 正在远程服务器上工作,然后数据通过网络通过管道传输到这台本地机器,然后压缩并存储在此处所需的文件中......而不是远程?