【发布时间】:2019-06-22 01:10:07
【问题描述】:
我正在尝试使用两个参数做一个基本的密码加密脚本,但我无法让它工作:
#!/usr/bin/bash
set -x
trap read debug
export ppwd=$2;
export usr=$1;
pwd=$(python -c 'import crypt, os,base64; print crypt.crypt("str(os.environ['ppwd'])", "$6$"+base64.b64encode(os.urandom(24))+"$")');
echo $ppwd;
echo $usr:$pwd|chpasswd -ec
我尝试使用常规 bash 脚本变量,打印 os.environ['ppwd'] 而不是 str(os.environ['ppwd']。 该脚本应该更改 AIX 环境的密码,但它不起作用。 如果我使用 python 命令和 chpasswd 手动执行它,它会起作用。我的猜测是它不会将变量传递给 python 命令.. 调试:
./sc.sh testuser MyPass134
+ trap read debug
++ read
+ export ppwd=MyPass134
+ ppwd=MyPass134
++ read
+ export usr=testuser
+ usr=testuser
++ read
++ python -c 'import crypt, os,base64; print
crypt.crypt("str(os.environ[ppwd]", "$6$"+base64.b64encode(os.urandom(24))+"$")'
+ pwd=bbdf5picgZM4.
++ read
+ echo
++ read
+ echo testuser:bbdf5picgZM4.
++ read
+ chpasswd -ec
【问题讨论】:
-
你只是有错字吗?
ppw与ppwd? -
您设置了 ppw 变量,但您调用了
os.environ['ppwd']。是不是打错字了? -
当您输入
python -c 'import crypt ... "str(os.environ['ppwd'])"时。这与您键入python -c 'import crypt ... "str(os.environ[ppwd])"完全相同,因为ppwd之前的第一个单引号关闭了-c之后的第一个单引号开始的引号,并且两个字符串连接在一起。 -
对不起,这是一个错字,问题仍未解决:(
-
我做了更多测试,在脚本中注释了 python 命令,单独运行命令,在脚本中手动替换 $ppwd 并使用用户名作为输入,并且运行良好。所以这个问题,就像我怀疑的那样,它没有在 python 命令中正确替换 $ppwd