curl запрос на логин со специальным символом пароля в скрипте bash? - PullRequest
0 голосов
/ 08 мая 2020

Я читаю пароль из входного файла и вхожу в систему с этим паролем. Однако, если пароль имеет специальный символ, он не работает. Как я могу заставить его работать для паролей со специальными символами или без них? Пробовали с "$ pass", но похоже, что это не работает.

ip="$(echo $line | awk -F ',' '{print $1}')"
pass="$(echo $line | awk -F ',' '{print $3}')"


output_json="$(curl -u admin:'$pass'  -X GET -H "Content-Type:application/json" https://$ip:443/admin -k)" 


1 Ответ

2 голосов
/ 08 мая 2020
  1. Вы должны всегда указывать расширения переменных
  2. Используйте одинарные кавычки для отключения раскрытия переменных и других специальных символов

Некоторые проблемы с вашим текущим кодом:

  • echo $line неправильно цитируется и разбивается на пробелы и другие специальные символы; используйте echo "$line"
    • Как @GordonDavisson предложил в комментариях, printf '%s\n' "$line" на самом деле будет безопаснее, чем echo, который может работать неправильно в зависимости от содержимого $line
  • admin:'$pass' преобразуется в буквальные символы admin:$pass, передаваемые в curl; используйте "admin:${pass}"
  • https://$ip:443/admin также неправильно цитируется, используйте "https://${ip}:443/admin"
  • Если $line устанавливается с буквальным паролем в скрипте вы нужны одинарные кавычки, чтобы оболочка игнорировала специальные символы; line='...,sbxy$sT_i7d6I*7'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...