Security
與apg結合使用時如何阻止sed中斷?
我正在編寫一個腳本,它將自動為我安裝 WordPress,讓我的生活更輕鬆,因為我必須不斷地部署 WordPress 安裝。
然而,我正在努力做到這一點,所以我永遠不必與它互動,這讓我睡不著覺。
要為數據庫等生成密碼,我使用 apg,然後使用 sed 將字元串替換為正確的密碼。它看起來像這樣:
DOMAIN="$2" DB_NAME_USER="$(echo $DOMAIN | sed -e 's/\.//g')" DB_PASSWORD="$(apg -a 1 -n 1 -m 64 -d -c cl_seed -E \_\"\'\`\/\\\=)" sed -i "s/database_name_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php sed -i "s/username_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php
替換數據庫和使用者名工作得很好,但是當替換密碼時,十次中有六次替換失敗,我最終得到這樣的結果:
定義(‘DB_PASSWORD’, ‘Ymb{X-dT~l5Agg9q561A^?n密碼_這裡D;$U,s>mu*:f7|BK4?oM#OH>cHgsI9GndW@~SkBQ’);
強調問題。它沒有刪除“password_here”部分並將其替換為實際密碼,而是將字元串融合在密碼中間。
我認為它可能是從 apg 生成的字元與 sed 混淆,但我從使用 -E 生成的密碼中刪除了很多,但仍然得到了很多。
其他替換也會發生同樣的情況,總是涉及 apg 和 sed。替換諸如**PASSWORD_HERE**之類的東西會不時導致相同的問題。
有什麼辦法可以解決這個問題,還是我必須繼續嘗試找到導致問題的字元,然後將它們添加到 apg 的排除列表中?或者也許告訴 sed 替換整行而不是我想要的字元串?
提前致謝!
您需要轉義輸入中的
\
,/
和&
字元,否則 sed 會對它們起作用。就像是DB_PASSWORD=$(echo "$DB_PASSWORD" | sed -e 's/[\/&]/\\&/g') sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php
應該做的伎倆。