繁体   English   中英

将带有特殊字符的变量作为密码传递会破坏bash脚本。 如何清除bash中的特殊字符?

[英]Passing Variable with Special characters as password breaks bash script. How do I Sanitize special characters in bash?

我正在寻找一种在bash密码更改脚本中清理变量的解决方案。

下面的脚本正在运行,但是我发现某些“特殊字符”会破坏我的脚本。 我现在无法控制正在传递的字符。 我正在寻找对变量进行传递之前对其进行清理的方法,或者将这些变量作为一个整体推开。 我尝试使用“ $ {PASS}”代替“ $ {PASS}”,但是在这种情况下脚本无法完成。

我会很感激任何人可以提供的任何建议。 我已经尝试过在发布之前搜索此问题的答案,但是没有找到任何相对的答案,因此,如果在其他地方回答了这个问题,我感到抱歉。

#!/bin/bash

# Two variables are passed, Username and new Password. 

USERNAME=$1
PASS=$2

expect << EOF
spawn passwd ${USERNAME}
expect "Enter new UNIX password:"
send "${PASS}\r"
expect "Retype new UNIX password:"
send "${PASS}\r"
expect eof;
EOF

expect << EOF
spawn htdigest /.passwd "Authenticated Users" ${USERNAME}
expect "New password:"
send "${PASS}\r"
expect "Re-type new password:"
send "${PASS}\r"
expect eof;
EOF

expect << EOF
spawn htpasswd /squiddb ${USERNAME}
expect "New password:"
send "${PASS}\r"
expect "Re-type new password:"
send "${PASS}\r"
expect eof;
EOF

先感谢您!

可以通过命令行参数将用户名和密码发送到Expect脚本,以期望使用。 像现在一样,双引号会使期望感到困惑,因为到此文档在发送给期望的标准输入之前已被完全内插。

像“ hej”这样的密码如果没有单引号,则会导致发送命令,期望如下所示:

发送“ hej” \\ r“

期望不会喜欢。

您可以通过argv访问该参数,请注意不要引起引用。 如果您在命令行中将用户名和密码作为参数传递给您,则不要将用户名和密码暴露给在该框中执行“ ps”的任何人。 但是您在问题中调用脚本时已经这样做了...

为什么不直接使用Expect Shell来执行此操作呢?

#!/usr/bin/expect

set timeout 20
set user [lindex $argv 0]
set password [lindex $argv 1]

spawn passwd $user
expect "Enter new UNIX password:"
send "$password\r";
expect "Retype new UNIX password:"
send "$password\r";
wait 1

spawn htdigest /.passwd "Authenticated Users" $user
expect "New password:"
send "$password\r"
expect "Re-type new password:"
send "$password\r"
wait 1

spawn htpasswd /squiddb $user
expect "New password:"
send "$password\r"
expect "Re-type new password:"
send "$password\r"

exit 0

像上面一样执行

./SCRIPTNAME.exp user password

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM