當密碼包含特殊字元時,htpasswd 設定錯誤的密碼

當密碼包含特殊字元時,htpasswd 設定錯誤的密碼

問題
我正在嘗試使用 更新大量用戶的密碼htpasswd。我正在使用 csv 檔案來提取新密碼。當腳本運行時,它似乎已成功更新用戶。但是,使用者無法使用新密碼登入。這是腳本:

#!/bin/bash

# Bash to update passwords from csv
CSV=intranet_users.csv
OLDIFS=$IFS
IFS=','
[ ! -f $CSV ] && { echo "$CSV file not found"; exit 99; }
  while read name dept username password
   do
     if [ "${username}" != '#N/A' ] && [ "${username}" != 0 ]; then
        echo "Resetting password for $username to: ${password}"
        htpasswd -b /path/to/passwdFile $username '${password}'
     fi
   done < $CSV
IFS=$OLDIFS

如果我針對密碼中沒有特殊字元的測試 csv 運行腳本,它就會起作用。
如果我htpasswd -b /path/to/passwdFile username 'password'在命令列上運行(帶有特殊字元的密碼),一切都會按預期運行。

為什麼腳本無法正確設定密碼?

我嘗試過的
我嘗試使用運行 htpasswdeval 我嘗試過引用 $password 的各種方法,即“'”,'\'',“\'”

答案1

發文希望能幫助別人。

事實證明問題不在於腳本。 csv 文件不乾淨。

csv 是在 Windows 環境中從 Excel 產生的。該文件有 dos 行結尾 - \r

我在呼叫 htpasswd 的行之前加入了下面的行,
password="${password/$'\r'/}"

這是工作程式碼:

CSV=intranet_users.csv
OLDIFS=$IFS
IFS=','
[ ! -f $CSV ] && { echo "$CSV file not found"; exit 99; }
while read name dept username password
do
    if [ "${username}" != '#N/A' ] && [ "${username}" != 0 ]; then
       password="${password/$'\r'/}"
       echo "Resetting password for $username to: $password"
       htpasswd -b /path/to/passwdFile $username ${password}
    fi
done < $CSV
IFS=$OLDIFS

相關內容