Check is_missing_host_keys before adding them

pull/12/head
Sheng 2018-04-10 08:26:32 +08:00
parent 838d453336
commit 53ed3aef7c
1 changed files with 20 additions and 9 deletions

29
main.py
View File

@ -40,18 +40,29 @@ class AutoAddPolicy(paramiko.client.MissingHostKeyPolicy):
""" """
lock = threading.Lock() lock = threading.Lock()
def is_missing_host_keys(self, client, hostname, key):
k = client._host_keys.lookup(hostname)
if k is None:
return True
host_key = k.get(key.get_name(), None)
if host_key is None:
return True
if host_key != key:
raise paramiko.BadHostKeyException(hostname, key, host_key)
def missing_host_key(self, client, hostname, key): def missing_host_key(self, client, hostname, key):
with self.lock: with self.lock:
keytype = key.get_name() if self.is_missing_host_keys(client, hostname, key):
logging.info( keytype = key.get_name()
'Adding {} host key for {}'.format(keytype, hostname) logging.info(
) 'Adding {} host key for {}'.format(keytype, hostname)
client._host_keys.add(hostname, keytype, key) )
client._host_keys.add(hostname, keytype, key)
with open(client._host_keys_filename, 'a') as f: with open(client._host_keys_filename, 'a') as f:
f.write('{} {} {}\n'.format( f.write('{} {} {}\n'.format(
hostname, keytype, key.get_base64() hostname, keytype, key.get_base64()
)) ))
paramiko.client.AutoAddPolicy = AutoAddPolicy paramiko.client.AutoAddPolicy = AutoAddPolicy