Пример #1
0
    def test_06_execute_remote_command(self):
        ssh = sshcontroller.SSHController()
        username = '******'
        hostname = 'localhost'
        port = '2022'
        command = 'mycommand'
        ssh.execute_remote_command(
            command,
            self.private_key_file,
            username,
            hostname,
            port,
            # Extra options
            UserKnownHostsFile=self.known_hosts_file,
        )

        self.assertTrue(os.path.exists(self.ssh_parms_file))
        with open(self.ssh_parms_file, 'r') as fd:
            parms = fd.read()
            fd.close()

        self.assertEqual(
            parms, self.SSH_REMOTE_COMMAND_PARMS % {
                'command': command,
                'username': username,
                'hostname': hostname,
                'port': port,
                'private_key_file': self.private_key_file,
                'known_hosts_file': self.known_hosts_file,
            })
Пример #2
0
    def setUp(self):
        self.test_directory = tempfile.mkdtemp()

        self.args = {
            'database_path': os.path.join(self.test_directory, 'database.db'),
            'tmp_session_destroy_timeout': 60,
        }

        # Open service
        self.service = subprocess.Popen([
            os.environ['PYTHON'],
            os.path.join(os.environ['TOPSRCDIR'],
                         'tests/test_fcdbus_service.py'),
            self.test_directory,
        ])

        checks = 0
        while True:
            try:
                self.c = FleetCommanderDbusClient()
                self.c.get_public_key()
                break
            except:
                checks += 1
                if checks < self.MAX_DBUS_CHECKS:
                    time.sleep(0.1)
                else:
                    raise Exception('Test error: ' +
                                    'DBUS Service is taking too much to start')

        self.ssh = sshcontroller.SSHController()
        self.known_hosts_file = os.path.join(self.test_directory,
                                             'known_hosts')
Пример #3
0
 def test_00_ssh_keypair_generation(self):
     # Generate key files
     ssh = sshcontroller.SSHController()
     ssh.generate_ssh_keypair(self.private_key_file)
     # Check parameters
     self.assertTrue(os.path.exists(self.ssh_keygen_parms_file))
     parms = open(self.ssh_keygen_parms_file).read()
     self.assertEqual(parms, self.SSH_KEYGEN_PARMS % self.private_key_file)
Пример #4
0
 def test_01_scan_host_keys(self):
     # Execute command
     ssh = sshcontroller.SSHController()
     hostname = 'localhost'
     port = '2022'
     keys = ssh.scan_host_keys(hostname, port)
     # Check keys data
     self.assertEqual(keys, self.SSH_KEYSCAN_OUTPUT % hostname)
     # Check parameters
     self.assertTrue(os.path.exists(self.ssh_keyscan_parms_file))
     parms = open(self.ssh_keyscan_parms_file).read()
     self.assertEqual(parms, self.SSH_KEYSCAN_PARMS % (port, hostname))
Пример #5
0
    def test_08_install_pubkey(self):
        ssh = sshcontroller.SSHController()
        # Change ssh command for session mocking
        ssh.SSH_COMMAND = 'ssh-session-mock'
        # Use bad credentials
        with self.assertRaisesRegexp(sshcontroller.SSHControllerException,
                                     'Invalid credentials'):
            ssh.install_pubkey('PUBKEY', 'username', 'badpassword',
                               'localhost', 22)

        # Use correct credentials (no exception raising)
        ssh.install_pubkey('PUBKEY', 'username', 'password', 'localhost', 22)
Пример #6
0
 def test_02_add_known_host(self):
     ssh = sshcontroller.SSHController()
     hostname = 'localhost'
     port = '2022'
     hostname2 = 'anotherhost'
     port2 = '22'
     ssh.add_to_known_hosts(self.known_hosts_file, hostname, port)
     # Check known hosts file exists
     self.assertTrue(os.path.exists(self.known_hosts_file))
     keys = open(self.known_hosts_file).read()
     # Check keys data
     self.assertEqual(keys, self.SSH_KEYSCAN_OUTPUT % hostname)
     # Add another host
     ssh.add_to_known_hosts(self.known_hosts_file, hostname2, port2)
     keys = open(self.known_hosts_file).read()
     # Check keys data
     self.assertEqual(
         keys, self.SSH_KEYSCAN_OUTPUT % hostname +
         self.SSH_KEYSCAN_OUTPUT % hostname2)
Пример #7
0
    def setUp(self):
        self.test_directory = tempfile.mkdtemp()

        self.args = {
            'webservice_host': 'localhost',
            'webservice_port': '0',
            'state_dir': self.test_directory,
            'profiles_dir': os.path.join(self.test_directory, 'profiles'),
            'database_path': os.path.join(self.test_directory, 'database.db'),
            'tmp_session_destroy_timeout': 60,
        }

        self.INDEX_FILE = os.path.join(self.args['profiles_dir'], 'index.json')
        self.APPLIES_FILE = os.path.join(self.args['profiles_dir'],
                                         'applies.json')

        # Open service
        self.service = subprocess.Popen([
            os.path.join(os.environ['TOPSRCDIR'],
                         'tests/test_fcdbus_service.py'),
            self.test_directory,
        ])

        checks = 0
        while True:
            try:
                c = fcdbus.FleetCommanderDbusClient()
                c.get_public_key()
                break
            except:
                checks += 1
                if checks < self.MAX_DBUS_CHECKS:
                    time.sleep(0.1)
                else:
                    raise Exception(
                        'Test error: ' +
                        'DBUS Service is getting too much to start')

        self.ssh = sshcontroller.SSHController()
        self.known_hosts_file = os.path.join(self.args['state_dir'],
                                             'known_hosts')
Пример #8
0
    def test_07_open_tunnel(self):
        ssh = sshcontroller.SSHController()
        local_port = '2000'
        tunnel_host = '192.168.0.2'
        tunnel_port = '2020'
        username = '******'
        hostname = 'localhost'
        port = '2022'
        command = 'mycommand'
        ssh.open_tunnel(
            local_port,
            tunnel_host,
            tunnel_port,
            self.private_key_file,
            username,
            hostname,
            port,
            # Extra options
            UserKnownHostsFile=self.known_hosts_file,
        )

        ssh._tunnel_prog.wait()
        self.assertTrue(os.path.exists(self.ssh_parms_file))
        with open(self.ssh_parms_file, 'r') as fd:
            parms = fd.read()
            fd.close()

        self.assertEqual(
            parms, self.SSH_TUNNEL_PARMS % {
                'local_port': local_port,
                'tunnel_host': tunnel_host,
                'tunnel_port': tunnel_port,
                'username': username,
                'hostname': hostname,
                'port': port,
                'private_key_file': self.private_key_file,
                'known_hosts_file': self.known_hosts_file,
            })
Пример #9
0
 def test_03_check_known_host(self):
     ssh = sshcontroller.SSHController()
     hostname = 'localhost'
     port = '2022'
     hostname2 = 'anotherhost'
     port2 = '22'
     # Check inexistent known hosts file
     result = ssh.check_known_host(self.known_hosts_file, hostname)
     self.assertFalse(result)
     # Check empty known hosts file
     open(self.known_hosts_file, 'w').close()
     self.assertTrue(os.path.exists(self.known_hosts_file))
     result = ssh.check_known_host(self.known_hosts_file, hostname)
     self.assertFalse(result)
     # Add some hosts to known_hosts_file
     ssh.add_to_known_hosts(self.known_hosts_file, hostname, port)
     ssh.add_to_known_hosts(self.known_hosts_file, hostname2, port2)
     # Check known hosts file for inexistent host
     result = ssh.check_known_host(self.known_hosts_file, 'inexistenthost')
     self.assertFalse(result)
     # Check known hosts file for existent host
     result = ssh.check_known_host(self.known_hosts_file, hostname)
     self.assertTrue(result)
Пример #10
0
 def test_05_get_host_fingerprint(self):
     ssh = sshcontroller.SSHController()
     hostname = 'localhost'
     port = '2022'
     fprints = ssh.get_host_fingerprint(hostname, port)
     self.assertEqual(fprints, self.SSH_KEYGEN_FINGERPRINT_OUTPUT)
Пример #11
0
 def test_04_get_fingerprint_from_key_data(self):
     ssh = sshcontroller.SSHController()
     key_data = 'KEY DATA'
     fprints = ssh.get_fingerprint_from_key_data(key_data)
     self.assertEqual(fprints, self.SSH_KEYGEN_FINGERPRINT_OUTPUT)