Ejemplo n.º 1
0
 def get_fingerprints(self):
     status = self._status()
     if status == 'unavailable':
         log.info("Instance '%s' unavailable", self.id)
         sys.exit(1)
     if status != 'running':
         log.info("Instance state: %s", status)
         sys.exit(1)
     result = []
     rc, out, err = self.master.ezjail_admin('console',
                                             name=self._name,
                                             cmd='ls /etc/ssh/')
     if rc != 0:
         return result
     pub_key_names = list(x for x in out.splitlines()
                          if fnmatch(x, 'ssh_host*_key.pub'))
     for pub_key_name in pub_key_names:
         rc, out, err = self.master.ezjail_admin(
             'console',
             name=self._name,
             cmd='ssh-keygen -lf /etc/ssh/%s' % pub_key_name)
         if rc != 0:
             continue
         (key, ) = parse_ssh_keygen(out)
         info = dict(fingerprint=key.fingerprint,
                     keylen=key.keylen,
                     keytype=key.keytype)
         result.append(info)
     return result
Ejemplo n.º 2
0
 def get_fingerprints(self):
     status = self._status()
     if status == 'unavailable':
         log.info("Instance '%s' unavailable", self.id)
         sys.exit(1)
     if status != 'running':
         log.info("Instance state: %s", status)
         sys.exit(1)
     result = []
     rc, out, err = self.master.ezjail_admin(
         'console', name=self._name,
         cmd='ls /etc/ssh/')
     if rc != 0:
         return result
     pub_key_names = list(
         x for x in out.splitlines()
         if fnmatch(x, 'ssh_host*_key.pub'))
     for pub_key_name in pub_key_names:
         rc, out, err = self.master.ezjail_admin(
             'console', name=self._name,
             cmd='ssh-keygen -lf /etc/ssh/%s' % pub_key_name)
         if rc != 0:
             continue
         (key,) = parse_ssh_keygen(out)
         info = dict(
             fingerprint=key.fingerprint,
             keylen=key.keylen,
             keytype=key.keytype)
         result.append(info)
     return result
Ejemplo n.º 3
0
 def get_ssh_fingerprints(self):
     fingerprints = self.config.get('ssh-fingerprints')
     if fingerprints is None:
         fingerprints = self.config.get('fingerprint')
     if fingerprints is None:
         if getattr(self, 'get_fingerprint', None) is not None:
             fingerprints = 'auto'
     if fingerprints is None:
         raise self.paramiko.SSHException("No fingerprint set in config.")
     fingerprints = [x.strip() for x in re.split(',|\n', fingerprints.strip())]
     result = []
     for fingerprint in fingerprints:
         path = os.path.join(self.master.main_config.path, fingerprint)
         if os.path.exists(path):
             try:
                 text = subprocess.check_output(['ssh-keygen', '-lf', path])
             except subprocess.CalledProcessError as e:
                 log.error("Couldn't get fingerprint from '%s':\n%s" % (path, e))
                 sys.exit(1)
             result.extend(parse_ssh_keygen(text))
             continue
         if fingerprint.lower() == 'auto':
             result.append(SSHKeyFingerprintInstance(self))
             continue
         if fingerprint.lower() == 'ask':
             result.append(SSHKeyFingerprintAsk())
             continue
         if fingerprint.lower() == 'ignore':
             result.append(SSHKeyFingerprintIgnore())
             continue
         result.append(SSHKeyFingerprint(parse_fingerprint(fingerprint)))
     return result
Ejemplo n.º 4
0
 def get_ssh_fingerprints(self):
     fingerprints = self.config.get('ssh-fingerprints')
     if fingerprints is None:
         fingerprints = self.config.get('fingerprint')
     if fingerprints is None:
         func = getattr(self, 'get_fingerprints', None)
         if func is None:
             func = getattr(self, 'get_fingerprint', None)
         if func is not None:
             fingerprints = 'auto'
     if fingerprints is None:
         fingerprints = '\n'.join(
             str(
                 SSHKeyFingerprint(('sha256',
                                    hashlib.sha256(key.asbytes()).digest()),
                                   keylen=key.get_bits(),
                                   keytype=key_type))
             for key_type, key in self.get_ssh_pub_host_keys())
         if not fingerprints:
             fingerprints = None
     if fingerprints is None:
         raise self.paramiko.SSHException("No fingerprint set in config.")
     fingerprints = split_option(fingerprints)
     result = []
     for fingerprint in fingerprints:
         path = os.path.join(self.master.main_config.path, fingerprint)
         if os.path.exists(path):
             try:
                 text = subprocess.check_output(['ssh-keygen', '-lf', path])
             except subprocess.CalledProcessError as e:
                 log.error("Couldn't get fingerprint from '%s':\n%s" %
                           (path, e))
                 sys.exit(1)
             result.extend(parse_ssh_keygen(text))
             continue
         if fingerprint.lower() == 'auto':
             result.append(SSHKeyFingerprintInstance(self))
             continue
         if fingerprint.lower() == 'ask':
             result.append(SSHKeyFingerprintAsk())
             continue
         if fingerprint.lower() == 'ignore':
             result.append(SSHKeyFingerprintIgnore())
             continue
         result.append(SSHKeyFingerprint(parse_fingerprint(fingerprint)))
     return result
Ejemplo n.º 5
0
Archivo: plain.py Proyecto: kernt/ploy
 def get_ssh_fingerprints(self):
     fingerprints = self.config.get('ssh-fingerprints')
     if fingerprints is None:
         fingerprints = self.config.get('fingerprint')
     if fingerprints is None:
         func = getattr(self, 'get_fingerprints', None)
         if func is None:
             func = getattr(self, 'get_fingerprint', None)
         if func is not None:
             fingerprints = 'auto'
     if fingerprints is None:
         fingerprints = '\n'.join(
             str(SSHKeyFingerprint(
                 ('sha256', hashlib.sha256(key.asbytes()).digest()),
                 keylen=key.get_bits(),
                 keytype=key_type))
             for key_type, key in self.get_ssh_pub_host_keys())
         if not fingerprints:
             fingerprints = None
     if fingerprints is None:
         raise self.paramiko.SSHException("No fingerprint set in config.")
     fingerprints = split_option(fingerprints)
     result = []
     for fingerprint in fingerprints:
         path = os.path.join(self.master.main_config.path, fingerprint)
         if os.path.exists(path):
             try:
                 text = subprocess.check_output(['ssh-keygen', '-lf', path])
             except subprocess.CalledProcessError as e:
                 log.error("Couldn't get fingerprint from '%s':\n%s" % (path, e))
                 sys.exit(1)
             result.extend(parse_ssh_keygen(text))
             continue
         if fingerprint.lower() == 'auto':
             result.append(SSHKeyFingerprintInstance(self))
             continue
         if fingerprint.lower() == 'ask':
             result.append(SSHKeyFingerprintAsk())
             continue
         if fingerprint.lower() == 'ignore':
             result.append(SSHKeyFingerprintIgnore())
             continue
         result.append(SSHKeyFingerprint(parse_fingerprint(fingerprint)))
     return result
Ejemplo n.º 6
0
def test_parse_ssh_keygen(text, keyinfo):
    assert all(a.match(b) for a, b in zip(parse_ssh_keygen(text), keyinfo))
Ejemplo n.º 7
0
def test_parse_ssh_keygen(text, keyinfo):
    assert all(a.match(b) for a, b in zip(parse_ssh_keygen(text), keyinfo))