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, })
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')
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)
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))
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)
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)
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')
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, })
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)
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)
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)