Невозможно запустить углеродный кэш с включенным люком
Когда я пытаюсь бежать carbon-cache.py start
установив
ENABLE_MANHOLE = True
MANHOLE_INTERFACE = 127.0.0.1
MANHOLE_PORT = 7222
MANHOLE_USER = admin
MANHOLE_PUBLIC_KEY = ssh-rsa AAAAB3NzaC1yc2EAAAABiwAaAIEAoxN0sv/e4eZCPpi3N3KYvyzRaBaMeS2RsOQ/cDuKv11dlNzVeiyc3RFmCv5Rjwn/lQ79y0zyHxw67qLyhQ/kDzINc4cY41ivuQXm2tPmgvexdrBv5nsfEpjs3gLZfJnyvlcVyWK/lId8WUvEWSWHTzsbtmXAF2raJMdgLTbQ8wE=
Я получаю следующую ошибку
Starting carbon-cache (instance a)
An error has occurred: b"ConchError: ('no host keys, failing', None)"
Please look at log file for more information.
Журнальный файл:
25/10/2016 13:50:18 :: 'listen%s' % (self.method,))(*self.args, **self.kwargs)
25/10/2016 13:50:18 :: File "/opt/graphite/local/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 478, in listenTCP
25/10/2016 13:50:18 :: p.startListening()
25/10/2016 13:50:18 :: File "/opt/graphite/local/lib/python2.7/site-packages/twisted/internet/tcp.py", line 1001, in startListening
25/10/2016 13:50:18 :: self.factory.doStart()
25/10/2016 13:50:18 :: File "/opt/graphite/local/lib/python2.7/site-packages/twisted/internet/protocol.py", line 74, in doStart
25/10/2016 13:50:18 :: self.startFactory()
25/10/2016 13:50:18 :: File "/opt/graphite/local/lib/python2.7/site-packages/twisted/conch/ssh/factory.py", line 41, in startFactory
25/10/2016 13:50:18 :: raise error.ConchError('no host keys, failing')
25/10/2016 13:50:18 :: twisted.conch.error.ConchError: ('no host keys, failing', None)
Будучи новичком в искривлении, я не могу понять, как его решить.
1 ответ
В Twisted 16.1 включено изменение в Twisted Conch (которое реализует функциональность люка), так что он больше не использует жестко закодированную пару ключей хоста SSH. См. https://twistedmatrix.com/trac/ticket/8229 для получения подробной информации.
Чтобы решить эту проблему, carbon-cache должен получить переменные конфигурации для указания открытого и закрытого ключа хоста и установить их на ConchFactory
Например, используя его publicKeys
а также privateKeys
атрибутов. Я посмотрел на текущую реализацию углерода manhole.py
, у которого есть:
def createManholeListener():
# ...
sessionFactory = ConchFactory(sshPortal)
return sessionFactory
Это должно быть изменено примерно так:
def createManholeListener():
# ...
sessionFactory = ConchFactory(sshPortal)
sessionFactory.publicKeys[b'ssh-rsa'] = keys.Key.fromString(settings.MANHOLE_HOST_RSA_PUBLIC_KEY)
sessionFactory.privateKeys[b'ssh-rsa'] = keys.Key.fromString(settings.MANHOLE_HOST_RSA_PRIVATE_KEY)
return sessionFactory
Это предполагает, что ключи генерируются с ssh-keygen -t rsa
, Если вы хотите поддерживать другие типы ключей, оба dicts индексируются байтовой строкой, указывающей тип ключа.