mirror of https://github.com/huashengdun/webssh
Check is_missing_host_keys before adding them
parent
838d453336
commit
53ed3aef7c
29
main.py
29
main.py
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue