Я поэкспериментировал с примером sftp отсюда: Stackoverflow: передача файла витой раковины
Я использую это здесь для подключения.Поэтому я могу использовать ключ из строки вместо пароля или ключи в ~ / .shh.Теперь я хочу доставить хост-ключ или отпечаток пальца с хост-ключа, чтобы пользователь не проверял хост-ключ
def sftp(user, host, port, key, hostkey):
options = ClientOptions()
options['key'] = keys.Key.fromString(key.strip()).keyObject
options['host'] = host
options['port'] = port
conn = SFTPConnection()
conn._sftp = Deferred()
auth = SSHUserAuthClient(user, options, conn)
connect(host, port, options, verifyHostKey, auth)
return conn._sftp
Я попытался дать некоторые аргументы для verifyHostkey, как вы можете прочитать в source отпечаток параметра не используется, и я не нашел допустимого значения для транспорта.
def verifyHostKey(transport, host, pubKey, fingerprint):
"""
Verify a host's key.
....
Любые идеи, как я могу опустить приглашение пользователя подтвердить хост-ключ без записи хост-ключаto ~ / .shh / known_hosts?
Хорошо, я написал функцию, основанную на ответе Жана-Поля Кальдероне.Я довольно наивен, но делаю это хорошо.Цель состояла в том, чтобы исключить необходимость в файле известного хоста.Я хочу, чтобы все ключи жили только в памяти.
def verifyHostKey(transport, host, pubKey, fingerprint):
keytype, key = transport.factory.options['hostkey'].split(" ")[1:]
hostkey = keytype + " " + key
key = Key.fromString(hostkey)
if key.fingerprint() == fingerprint:
return succeed(True)
else:
raise BadKeyError