gpt4 book ai didi

linux - 当密码包含反引号时 bash 脚本失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:14 24 4
gpt4 key购买 nike

一位同事编写了一个脚本,作为远程​​执行其他脚本的包装器。它被设置为要求输入密码,然后该密码被 echo 发送到远程系统,以便在 sudo 中使用。

相关代码*:

read -s pw
....
${SSH_tt} ${HOST} "echo ${pw} | ${SUDO_S} ./${SCRIPT_NAME} > ${HOME}/${HOST_OUTPUT}" 2> /dev/null

* 请忽略所有大写变量。

如果我输入包含反引号的密码,我会收到以下错误:

bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file

如果我将密码更改为不包含反引号的密码,则脚本运行正常。我想这也会发生在包含单引号和双引号的密码中。

虽然更改我的密码是一个选项,但由于我们平台的规模(我们不使用集中式身份验证),这是不可取的。我想知道是否有一种方法可以清理或以其他方式转义反引号,这样它就不会被 shell 在本地或远程解释。

最佳答案

您可以在执行最后一行之前转义密码。

在 bash 中:

escaped_pw=`printf "%q" ${pw}`

然后使用 escaped_pw 代替 pw

${SSH_tt} ${HOST} "echo ${escaped_pw} | ${SUDO_S} ./${SCRIPT_NAME} > ${HOME}/${HOST_OUTPUT}" 2> /dev/null

这是一个例子:

$ read -s pw
$ echo $pw
ronak`gandhi
$ escaped_pw=`printf "%q" ${pw}`
$ echo $escaped_pw
ronak\`gandhi
$ ssh myhost "echo ${escaped_pw} - `date`"
ronak`gandhi - Thu Jun 18 19:28:47 PDT 2015

关于linux - 当密码包含反引号时 bash 脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30928707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com