【发布时间】:2021-04-08 04:49:26
【问题描述】:
我有以下 bash 脚本可以自动将河豚插入 config.inc.php 以供 phpMyAdmin 使用:
#!/bin/bash
randomBlowfishSecret=$(openssl rand -base64 32)
echo "BlowFish Value: ${randomBlowfishSecret}"
replace_pma_blowfish="\$cfg['blowfish_secret'] = '${randomBlowfishSecret}'; \/* YOU MUST FILL IN THIS FOR COOKIE AUTH! *\/"
sed -i "s/\$cfg\[.blowfish_secret.\]\s*=.*/${replace_pma_blowfish}/" /var/www/html/phpMyAdmin/config.inc.php
它可以工作,但如果河豚键包含这个字符'/',我会得到如下 sed 错误:
root@test:./test
BlowFish Value: omaRJZpTeWZPQU+dqDc7UlrXZnL6j8i0wSE/3kTnjLU=
sed: -e expression #1, char 99: unknown option to `s'
有没有办法生成 openssl 32 字符而没有这个字符 '/' 或者我们如何允许 openssl 中的某些字符集像这组字符:
!#%+23456789:=?@ABCDEFGHJKLMNPRS
为了防止脚本中的错误,我想避免使用某些字符,例如 '/' '$' 和其他字符。我知道转义斜线是有效的,但我不想使用这个字符,因为它会与另一个代码有错误,我不想更改其他代码一个例子就是圆形立方体,它不会接受字符':' 和 '@' 我认为这个字符 '/' 也会有其他代码的问题。所以我不想让openssl生成这个字符'/'
要求:
- 允许一些特殊字符,如'[' ']' '?'并避免使用一些字符,例如 '/' '$'
- 密码长度为 32
【问题讨论】:
-
从
s///语法切换到s|||,例如见:Escaping forward slashes in sed command -
我的意思是我真的不想在密码中包含那个斜杠,只想要没有 '/' 的密码,如果我知道如何在没有 '/' 的情况下生成 openssl,我可以尝试排除其他字符,因为我知道还有一些其他字符会导致此错误(并非所有特殊字符都应排除)
-
似乎链接正在谈论使用 sed 将“/”替换为其他一些字符,但这不是完全随机的密码,对吧?另外,我真的不想在 openssl 密码中使用某些特殊字符,例如 '/' '$',如何在没有这些字符的情况下随机生成该密码。
-
不断生成新密码,直到你得到一个没有
/的密码? -
理论上,在没有
/的情况下获得密码可能需要无限长的时间。
标签: bash sed openssl blowfish roundcube