|
22 | 22 | from pssh import SSHClient, ParallelSSHClient, UnknownHostException, AuthenticationException, _setup_logger, logger |
23 | 23 | from fake_server.fake_server import start_server, make_socket, logger as server_logger, \ |
24 | 24 | paramiko_logger |
| 25 | +from fake_server.fake_agent import FakeAgent |
| 26 | +import paramiko |
25 | 27 | import os |
26 | 28 | from test_pssh_client import USER_KEY |
27 | 29 |
|
28 | 30 | # _setup_logger(server_logger) |
29 | 31 | # _setup_logger(logger) |
30 | 32 | # _setup_logger(paramiko_logger) |
31 | 33 |
|
| 34 | +USER_KEY = paramiko.RSAKey.from_private_key_file( |
| 35 | + os.path.sep.join([os.path.dirname(__file__), 'test_client_private_key'])) |
| 36 | + |
32 | 37 | class SSHClientTest(unittest.TestCase): |
33 | 38 |
|
34 | 39 | def setUp(self): |
@@ -70,5 +75,27 @@ def test_ssh_client_sftp(self): |
70 | 75 | del client |
71 | 76 | server.join() |
72 | 77 |
|
| 78 | + def test_ssh_agent_authentication(self): |
| 79 | + """Test authentication via SSH agent. |
| 80 | + Do not provide public key to use when creating SSHClient, |
| 81 | + instead override the client's agent with our own fake SSH agent, |
| 82 | + add our to key to agent and try to login to server. |
| 83 | + Key should be automatically picked up from the overriden agent""" |
| 84 | + agent = FakeAgent() |
| 85 | + agent.add_key(USER_KEY) |
| 86 | + server = start_server({ self.fake_cmd : self.fake_resp }, |
| 87 | + self.listen_socket) |
| 88 | + client = SSHClient('127.0.0.1', port=self.listen_port) |
| 89 | + client.client._agent = agent |
| 90 | + channel, host, _stdout, _stderr = client.exec_command(self.fake_cmd) |
| 91 | + output = (line.strip() for line in _stdout) |
| 92 | + channel.close() |
| 93 | + output = list(output) |
| 94 | + expected = [self.fake_resp] |
| 95 | + self.assertEqual(expected, output, |
| 96 | + msg = "Got unexpected command output - %s" % (output,)) |
| 97 | + del client |
| 98 | + server.join() |
| 99 | + |
73 | 100 | if __name__ == '__main__': |
74 | 101 | unittest.main() |
0 commit comments