Saa*_*hib 14 bash scripts password
我一直在阅读这里已经提出的很多问题,但是,不知何故,没有什么对我有用。我有一个 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 然后又是无效字符错误。
我缺少什么建议?
A.B*_*.B. 13
使用双引号两次,转义和不转义: -p"\"$MYPASSWORD\""
#!/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)
或者其他版本
/usr/bin/ssh -p 91899 user@remoteHost "mysqldump -u db_user -p\"'io#bc@14@9$#jf7AZlk99'\" my_database | gzip -c > my_database.sql.gz"
Run Code Online (Sandbox Code Playgroud)
例子
% source pass.cre
% ssh user@host mysqldump -u root -p$MYPASSWORD
user@host's password:
zsh:1: bad pattern: -p#8111*@uu(
% source pass.cre
% ssh user@host mysqldump -u root -p"$MYPASSWORD"
user@host's password:
zsh:1: bad pattern: -p#8111*@uu(
% source pass.cre
% ssh user@host mysqldump -u root -p"\"$MYPASSWORD\""
user@host's password:
Warning: Using a password on the command line interface can be insecure.
Run Code Online (Sandbox Code Playgroud)
问题是您的字符串被解释两次,一次由本地 shell 解释,另一次由ssh为您运行的远程 shell 解释。因此,您需要使用以下任一方法引用两次:
-p\''#8111*@uu('\'
-p"'#8111*@uu('"
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您要双引号""整个命令,则包含$. 您需要单引号该命令以避免这种情况。但您仍然需要单引号该-p值,因为它会被解释两次。因此,您需要在单引号内添加单引号。
这是通过使用单引号( \') 来完成的,如本例所示:
'I don'\''t like java'
Run Code Online (Sandbox Code Playgroud)
会给你字符串I don't like java。所以你的双引号示例变成了单引号:
/usr/bin/ssh -p 91899 user@remoteHost 'mysqldump -u db_user -p'\''io#bc@14@9$#jf7AZlk99'\''my_database | gzip -c > my_database.sql.gz'
Run Code Online (Sandbox Code Playgroud)
你不就是喜欢它吗?