Support for private keys
This commit is contained in:
@@ -100,11 +100,14 @@ class SSHClient(object):
|
||||
def __exit__(self, type, value, traceback):
|
||||
self.ssh.sudo_mode = False
|
||||
|
||||
def __init__(self, host, port=22, username=None, password=None):
|
||||
def __init__(self, host, port=22, username=None, password=None,
|
||||
private_keys=None):
|
||||
self.host = str(host)
|
||||
self.port = int(port)
|
||||
self.username = username
|
||||
self.password = password
|
||||
if not private_keys: private_keys = []
|
||||
self.private_keys = private_keys
|
||||
|
||||
self.sudo_mode = False
|
||||
self.sudo = self.get_sudo(self)
|
||||
@@ -126,9 +129,16 @@ class SSHClient(object):
|
||||
logging.debug(
|
||||
"Connect to '%s:%s' as '%s:%s'" % (
|
||||
self.host, self.port, self.username, self.password))
|
||||
self._ssh.connect(
|
||||
self.host, port=self.port, username=self.username,
|
||||
password=self.password)
|
||||
for private_key in self.private_keys:
|
||||
try:
|
||||
return self._ssh.connect(
|
||||
self.host, port=self.port, username=self.username,
|
||||
password=self.password, pkey=private_key)
|
||||
except paramiko.AuthenticationException:
|
||||
pass
|
||||
return self._ssh.connect(
|
||||
self.host, port=self.port, username=self.username,
|
||||
password=self.password)
|
||||
|
||||
def reconnect(self):
|
||||
self._ssh = paramiko.SSHClient()
|
||||
|
||||
@@ -101,7 +101,7 @@ class ExternalModel(models.Model):
|
||||
"""
|
||||
:rtype : DevopsDriver
|
||||
"""
|
||||
driver = import_module('.base', DRIVER)
|
||||
driver = import_module(DRIVER)
|
||||
cls._driver = cls._driver or driver.LibvirtDriver()
|
||||
return cls._driver
|
||||
|
||||
@@ -233,14 +233,14 @@ class Node(ExternalModel):
|
||||
return Address.objects.get(
|
||||
interface__network__name=name, interface__node=self).ip_address
|
||||
|
||||
def remote(self, network_name, login, password):
|
||||
def remote(self, network_name, login, password=None, private_keys=None):
|
||||
"""
|
||||
:rtype : SSHClient
|
||||
"""
|
||||
return SSHClient(
|
||||
self.get_ip_address_by_network_name(network_name),
|
||||
username=login,
|
||||
password=password)
|
||||
password=password, private_keys=private_keys)
|
||||
|
||||
def await(self, network_name, timeout=120):
|
||||
wait(
|
||||
|
||||
Reference in New Issue
Block a user