diff --git a/src/ssh/azext_ssh/rdp_utils.py b/src/ssh/azext_ssh/rdp_utils.py index 63a6ff3c460..e5387b0a852 100644 --- a/src/ssh/azext_ssh/rdp_utils.py +++ b/src/ssh/azext_ssh/rdp_utils.py @@ -110,7 +110,8 @@ def start_ssh_tunnel(op_info): if '-E' in op_info.ssh_args: raise azclierror.BadRequestError("Can't use -E ssh parameter when using --rdp") - command = [ssh_utils.get_ssh_client_path('ssh', op_info.ssh_client_folder), op_info.get_host()] + command = [ssh_utils.get_ssh_client_path('ssh', op_info.ssh_client_folder), op_info.get_host(), + "-l", op_info.local_user] command = command + op_info.build_args() + op_info.ssh_args logger.debug("Running ssh command %s", ' '.join(command)) diff --git a/src/ssh/azext_ssh/ssh_info.py b/src/ssh/azext_ssh/ssh_info.py index 37672abc05e..722da8f3292 100644 --- a/src/ssh/azext_ssh/ssh_info.py +++ b/src/ssh/azext_ssh/ssh_info.py @@ -46,12 +46,12 @@ def is_arc(self): return False def get_host(self): - if not self.is_arc(): - if self.local_user and self.ip: - return self.local_user + "@" + self.ip - else: - if self.local_user and self.vm_name: - return self.local_user + "@" + self.vm_name + if not self.is_arc() and self.ip: + return self.ip + + if self.is_arc() and self.vm_name: + return self.vm_name + raise azclierror.BadRequestError("Unable to determine host.") # build args behaves different depending on the resource type diff --git a/src/ssh/azext_ssh/ssh_utils.py b/src/ssh/azext_ssh/ssh_utils.py index 1986a604431..56633acba62 100644 --- a/src/ssh/azext_ssh/ssh_utils.py +++ b/src/ssh/azext_ssh/ssh_utils.py @@ -40,7 +40,7 @@ def start_ssh_connection(op_info, delete_keys, delete_cert): env['SSHPROXY_RELAY_INFO'] = connectivity_utils.format_relay_info_string(op_info.relay_info) # Get ssh client before starting the clean up process in case there is an error in getting client. - command = [get_ssh_client_path('ssh', op_info.ssh_client_folder), op_info.get_host()] + command = [get_ssh_client_path('ssh', op_info.ssh_client_folder), op_info.get_host(), "-l", op_info.local_user] if not op_info.cert_file and not op_info.private_key_file: # In this case, even if delete_credentials is true, there is nothing to clean-up. diff --git a/src/ssh/azext_ssh/tests/latest/test_rdp_utils.py b/src/ssh/azext_ssh/tests/latest/test_rdp_utils.py index 74489140d52..92e96b39091 100644 --- a/src/ssh/azext_ssh/tests/latest/test_rdp_utils.py +++ b/src/ssh/azext_ssh/tests/latest/test_rdp_utils.py @@ -29,7 +29,7 @@ def test_start_ssh_tunnel(self, mock_popen, mock_relay, mock_path, mock_env): mock_relay.return_value = 'relay_string' mock_popen.return_value = 'ssh_process' - expected_command = ['ssh', "user@vm", '-o', 'ProxyCommand=\"proxy\" -p port', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', 'arg1', 'arg2', '-v'] + expected_command = ['ssh', "vm", '-l', 'user', '-o', 'ProxyCommand=\"proxy\" -p port', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', 'arg1', 'arg2', '-v'] expected_env = {'var1':'value1', 'var2':'value2', 'var3':'value3', 'SSHPROXY_RELAY_INFO':'relay_string'} ssh_sub, print_logs = rdp_utils.start_ssh_tunnel(op_info) diff --git a/src/ssh/azext_ssh/tests/latest/test_ssh_info.py b/src/ssh/azext_ssh/tests/latest/test_ssh_info.py index 517b554f1d3..681f77a7088 100644 --- a/src/ssh/azext_ssh/tests/latest/test_ssh_info.py +++ b/src/ssh/azext_ssh/tests/latest/test_ssh_info.py @@ -45,9 +45,9 @@ def test_ssh_session(self, mock_abspath): def test_ssh_session_get_host(self): session = ssh_info.SSHSession(None, None, "ip", None, None, False, "user", None, None, None, [], False, "Microsoft.Compute", None, None, False) - self.assertEqual("user@ip", session.get_host()) + self.assertEqual("ip", session.get_host()) session = ssh_info.SSHSession("rg", "vm", None, None, None, False, "user", None, None, None, [], False, "Microsoft.HybridCompute", None, None, True) - self.assertEqual("user@vm", session.get_host()) + self.assertEqual("vm", session.get_host()) @mock.patch('os.path.abspath') def test_ssh_session_build_args_compute(self, mock_abspath): diff --git a/src/ssh/azext_ssh/tests/latest/test_ssh_utils.py b/src/ssh/azext_ssh/tests/latest/test_ssh_utils.py index 26877814d08..dc37b42e864 100644 --- a/src/ssh/azext_ssh/tests/latest/test_ssh_utils.py +++ b/src/ssh/azext_ssh/tests/latest/test_ssh_utils.py @@ -32,7 +32,7 @@ def test_start_ssh_connection_compute(self, mock_system, mock_copy_env, mock_cal mock_path.return_value = 'ssh' mock_copy_env.return_value = {'var1':'value1', 'var2':'value2', 'var3':'value3'} mock_startcleanup.return_value = 'log', ['arg1', 'arg2', 'arg3', '-E', 'log', '-v'], 'cleanup process' - expected_command = ['ssh', 'user@ip', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', '-p', 'port', 'arg1', 'arg2', 'arg3', '-E', 'log', '-v'] + expected_command = ['ssh', 'ip', '-l', 'user', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', '-p', 'port', 'arg1', 'arg2', 'arg3', '-E', 'log', '-v'] expected_env = {'var1':'value1', 'var2':'value2', 'var3':'value3'} ssh_utils.start_ssh_connection(op_info, True, True) @@ -63,7 +63,7 @@ def test_start_ssh_connection_arc(self, mock_system, mock_relay_str, mock_call, mock_relay_str.return_value = 'relay_string' mock_copy_env.return_value = {'var1':'value1', 'var2':'value2', 'var3':'value3'} mock_path.return_value = 'ssh' - expected_command = ['ssh', 'user@vm', '-o', 'ProxyCommand=\"proxy\" -p port', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', 'arg1'] + expected_command = ['ssh', 'vm', '-l', 'user', '-o', 'ProxyCommand=\"proxy\" -p port', '-i', 'priv', '-o', 'CertificateFile=\"cert\"', 'arg1'] expected_env = {'var1':'value1', 'var2':'value2', 'var3':'value3', 'SSHPROXY_RELAY_INFO':'relay_string'} ssh_utils.start_ssh_connection(op_info, False, False)