python os.system: синтаксическая ошибка рядом с неожиданным токеном `(‘- вложенные скобки

Я читал, что я могу поставить bash скобки в кавычки при отправке команды из Python. В этом случае я пытаюсь создать ключ и csr для openssl, используя команду, которая работает в оболочке, но не при запуске из python. Я пробовал несколько комбинаций, но продолжаю сталкиваться с дополнительными проблемами.

Следующая команда python завершается неудачно:

import os os.system('openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/emailAddress=administrators@my.com" -reqexts OPTS -config <(cat /etc/pki/tls/openssl.cnf <(printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth"))') 

Основная команда openssl успешно выполняется:

 openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/emailAddress=administrators@my.com" -reqexts OPTS -config <(cat /etc/pki/tls/openssl.cnf <(printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth")) 

Это должно быть что-то простое, но ответ ускользает от меня.

2 Solutions collect form web for “python os.system: синтаксическая ошибка рядом с неожиданным токеном `(‘- вложенные скобки”

< (…) - это подстановка процесса, которая существует в bash (и ksh и zsh), но не в простой sh. system функция вызывает sh, а не bash.

Вы можете использовать канал вместо подстановки процесса на openssl и упростить подстановку вложенного процесса в простую последовательность команд.

 { cat /etc/pki/tls/openssl.cnf; printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth"; } | openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/emailAddress=administrators@my.com" -reqexts OPTS -config - 

(разрывы строк необязательны)

Спасибо за ответы. Я немного подумал и решил поискать способ сделать это на Python. На веб-сайте, посвященном криптографии Python, и другим пользователям было достаточно информации, чтобы я смог собрать код Python для генерации CSR.

 requires pyOpenSSL from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend()) with open('mycert.key', 'wb') as f: f.write(key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption())) from OpenSSL import crypto # load private key ftype = crypto.FILETYPE_PEM with open('mycert.key', 'rb') as f: key = f.read() key = crypto.load_privatekey(ftype, key) req = crypto.X509Req() alt_name = [ b"DNS:mynode", b"DNS:myF5", b"email:administratore@email.com" ] key_usage = [ b"Digital Signature", b"Key Encipherment" ] key_usage = [ b"digitalSignature", b"keyEncipherment" ] ext_key_usage = [ b"serverAuth", b"clientAuth" ] # country (countryName, C) # state or province name (stateOrProvinceName, ST) # locality (locality, L) # organization (organizationName, O) # organizational unit (organizationalUnitName, OU) # common name (commonName, CN) req.get_subject().C = "US" req.get_subject().ST = "Florida" req.get_subject().L = "St Petersburg" req.get_subject().O = "myCompany" req.get_subject().OU = "MyOU" req.get_subject().CN = "mynode" req.add_extensions([ crypto.X509Extension( b"basicConstraints", False, b"CA:FALSE"), crypto.X509Extension( b"keyUsage", False, b",".join(key_usage)), crypto.X509Extension( b"subjectAltName", False, b",".join(alt_name)) ]) req.set_pubkey(key) req.sign(key, "sha256") csr = crypto.dump_certificate_request(ftype, req) with open("mycert.csr", 'wb') as f: f.write(csr) 
  • Разбор строки по awk и получить только элементы без труб или полуколонок
  • Использование уведомления-отправки с помощью cron
  • Найти всех пользователей, которые имеют более N процессов и эхо их в оболочке
  • Автоматизировать ввод в оболочку программы
  • Как выполнить xargs grep для вывода grep с пробелами?
  • почему ! символ, используемый в сценариях оболочки
  • скопируйте раздел данных из stdin
  • определять оболочку в скрипте во время выполнения
  • Как копировать и вставлять строки между ключевым словом start и end?
  • Как перебрать две переменные в сценарии sh?
  • Как искать скобки по ack
  • Interesting Posts

    Каталог, установленный под обычным пользователем, недоступен от указанного пользователя

    Могу ли я построить дистрибутив linux с libc вместо glibc

    Отслеживание «отсутствия» использования памяти в Linux

    добавить ключ к proc / keys

    Остановка хромовой анимации при де-значении

    debootstrap не работает в кали и мяте

    команда, которая работает как символ ~ (тильда) для представления некоторого каталога

    Сообщение «Неверная соль» при входе в систему. Какой алгоритм используется для генерации пароля пользователя?

    Могу ли я гарантировать, что история регистрирует все выполнение?

    Cinnamon DE не меняет обои для рабочего стола и не меняет темы

    Есть ли альтернатива GPI для графического интерфейса?

    Как изменить пароль пользователя LDAP?

    Как индексирование работает с командой locate?

    Сценарий Bash для установки веб-сайта

    Как удалить определенную строку символов в имени файла?

    Linux и Unix - лучшая ОС в мире.