Я играю с примером 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
Я попытался привести некоторые аргументы для проверкиHostkey, как вы можете прочитать в его source отпечаток параметра не используется, и я не нашел допустимого значения для транспорта.
def verifyHostKey(transport, host, pubKey, fingerprint):
"""
Verify a host's key.
....
Любые идеи, как я могу исключить запрос пользователя на проверку ключа хоста без записи ключа хоста в ~/.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