Как добавить поддомены в letsencrypt с помощью certbots?

Возможно, вам не следует этого делать, но вы можете. Ответ Кусалананды лучше подходит для поставленной задачи и объясняет проблему.Поскольку вы спросили конкретно, как использовать любые библиотечные вызовы внутри терминала, вот несколько способов...


Tiny C Compiler(tcc)поддерживает -runфлаг , который позволяет вам (фактически )интерпретировать код C путем написания небольшой программы, поэтому вы можете использовать любые библиотечные вызовы внутри терминала посредством одного вызова этого.

Вы можете запустить функцию strnlenследующим образом:

$ tcc -run <(echo '#include '; echo '#include '; echo 'void main(int argc, char **argv) {printf("%i\n", strnlen(argv[1], 1024));}') "Hello world"
11

При этом используется подстановка процесса из Bash, zsh и других оболочек для предоставления tccфайла для чтения, который, по-видимому, содержит результаты всех echos; есть другие варианты.

Вы можете создать функцию, которая будет генерировать это для вас:

call_library_function_s_i() {
    func=$1
    shift
    tcc -run <(echo '#include '; echo '#include '; echo 'void main(int argc, char **argv) {printf("%i\n", '$func'(argv[1]));}') "$*"
}
$ call_library_function_s_i strlen hello world

(Я использовал strlenздесь, так что это строка унарной функции ->int -вам понадобится отдельная функция для каждой другой арности и типа возвращаемого значения ).


Другим вариантом является подключаемый модуль ctypes.shBash Тэвиса Орманди, который объединяет dlopenи dlsym. Это, вероятно, самое близкое приближение к тому, что вы пытались. Вы можете использовать, например,:

$ dlcall -r uint64 strlen "hello world"

и вызовет функцию, как и ожидалось.

Это самый прямой способ сделать это "из терминала", но вряд ли это будет что-то из вашего дистрибутива, поэтому вам придется устанавливать его вручную (, что нетривиально ). Вот несколько информативных цитат с собственного веб-сайта ctypes.sh, чтобы дать общее представление о том, как люди относятся к этому:

  • "that's disgusting"
  • "this has got to stop"
  • "you've gone too far with this"

Для других оболочек могут быть подобные инструменты, но я о них не знаю. Теоретически нет никаких причин, по которым не может быть отдельной команды, которая делала бы это именно для простых случаев, но я несколько удивлен, что не смог найти ее...


... так что я сделал один!dlcall позволяет вызывать библиотечные функции из командной строки:

$ dlcall strnlen "hello world" 6
$ dlcall sin 2.5
$ dlcall strchr "hello world" -c ' '

Он поддерживает ограниченный набор прототипов функций, в настоящее время он не очень надежен или отказоустойчив, но теперь он существует.


Вы также можете использовать, например, Python и python -c 'import ctypes; import sys; print(ctypes.cdll.LoadLibrary("libc.so.6").strlen(" ".join(sys.argv[1:])))' hello world, но это, безусловно, не самый простой способ. Perl, Ruby и другие языки имеют схожие функции, которые вы могли бы использовать.


Итак, ответы на ваши вопросы:

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

В общем, вам почти наверняка будет лучше сделать это любым другим способом.

0
03.01.2020, 12:05
1 ответ

Вы должны использовать опцию --expandcertbot

--expandуказывает Certbot обновить существующий сертификат новым сертификатом, который содержит все старые домены и один или несколько дополнительных новых доменов. С опцией --expandиспользуйте опцию -d, чтобы указать все существующие домены и один или несколько новых доменов.

Пример:

certbot --expand -d mysite.com,imap.mysite.com,smtp.mysite.com

https://certbot.eff.org/docs/using.html#re-creating-and-updating-existing-certificates

3
28.01.2020, 02:29

Теги

Похожие вопросы