Я работаю над автоматизацией обновления и установки сертификатов в моих веб-приложениях. Этот конкретный является qBittorrent. Он хранит сертификат SSL / закрытый ключ в файле конфигурации, например,
...
WebUI\AuthSubnetWhitelistEnabled=false
WebUI\HTTPS\Certificate=@ByteArray(-----BEGIN CERTIFICATE-----\n0GCSqGSIb3DQEBCwUA\nMEoxCzAQaih7W\n-----END CERTIFICATE-----)
WebUI\HTTPS\Enabled=true
WebUI\HTTPS\Key="@ByteArray(-----BEGIN PRIVATE KEY-----\nFAASdoONpV\nBvX+hUcjAne0PkZV9d7NG1QvipW+MPa4N12i+aRmwK\nhACATS21MMnBFTRGSfzwLy4=\n-----END PRIVATE KEY-----)"
WebUI\LocalHostAuth=true
...
Мне нужно иметь возможность проанализировать файл и заменить строки сертификата и закрытого ключа. Потратив на это несколько дней, я приблизился
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1foo\2/g" /home/qbtuser/.config/qBittorrent/qBittorrent.conf
Это работает и заменяет строку сертификата на foo
. Однако, когда я читаю фактический сертификат из файла и подставляю его, он завершается ошибкой:
cert=$(<$certPath)
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1${cert}\2/g" /home/qbtuser/.config/qBittorrent/qBittorrent.conf
sed: -e expression #1, char 78: unterminated `s' command
Видимо, ему не нравятся переводы строк в файле сертификата. Если я установлю cert
в однострочное значение, например foo
, это будет работать. Но многострочный не работает.
Как мне сделать эту работу?