Support for private keys

This commit is contained in:
vic
2013-04-03 22:38:23 +04:00
parent dbf438e65a
commit 387ace6372
2 changed files with 17 additions and 7 deletions

View File

@@ -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()

View File

@@ -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(