11# coding: utf-8 
22# Copyright (c) Jan Janssen 
33
4+ import  getpass 
45import  json 
56import  os 
67import  warnings 
@@ -25,12 +26,18 @@ def __init__(self, config, directory="~/.queues", execute_command=execute_comman
2526        )
2627        if  "ssh_key"  in  config .keys ():
2728            self ._ssh_key  =  os .path .abspath (os .path .expanduser (config ["ssh_key" ]))
29+             self ._ssh_ask_for_password  =  False 
2830        else :
2931            self ._ssh_key  =  None 
3032        if  "ssh_password"  in  config .keys ():
3133            self ._ssh_password  =  config ["ssh_password" ]
34+             self ._ssh_ask_for_password  =  False 
3235        else :
3336            self ._ssh_password  =  None 
37+         if  "ssh_ask_for_password"  in  config .keys ():
38+             self ._ssh_ask_for_password  =  config ["ssh_ask_for_password" ]
39+         else :
40+             self ._ssh_ask_for_password  =  False 
3441        if  "ssh_key_passphrase"  in  config .keys ():
3542            self ._ssh_key_passphrase  =  config ["ssh_key_passphrase" ]
3643        else :
@@ -221,15 +228,19 @@ def _transfer_files(self, file_dict, sftp=None, transfer_back=False):
221228    def  _open_ssh_connection (self ):
222229        ssh  =  paramiko .SSHClient ()
223230        ssh .load_host_keys (self ._ssh_known_hosts )
224-         if  self ._ssh_key  is  not   None  and  self ._ssh_key_passphrase  is  not   None :
231+         if  (
232+             self ._ssh_key  is  not   None 
233+             and  self ._ssh_key_passphrase  is  not   None 
234+             and  not  self ._ssh_ask_for_password 
235+         ):
225236            ssh .connect (
226237                hostname = self ._ssh_host ,
227238                port = self ._ssh_port ,
228239                username = self ._ssh_username ,
229240                key_filename = self ._ssh_key ,
230241                passphrase = self ._ssh_key_passphrase ,
231242            )
232-         elif  self ._ssh_key  is  not   None :
243+         elif  self ._ssh_key  is  not   None   and   not   self . _ssh_ask_for_password :
233244            ssh .connect (
234245                hostname = self ._ssh_host ,
235246                port = self ._ssh_port ,
@@ -240,13 +251,21 @@ def _open_ssh_connection(self):
240251            self ._ssh_password  is  not   None 
241252            and  self ._ssh_authenticator_service  is  None 
242253            and  not  self ._ssh_two_factor_authentication 
254+             and  not  self ._ssh_ask_for_password 
243255        ):
244256            ssh .connect (
245257                hostname = self ._ssh_host ,
246258                port = self ._ssh_port ,
247259                username = self ._ssh_username ,
248260                password = self ._ssh_password ,
249261            )
262+         elif  self ._ssh_ask_for_password  and  not  self ._ssh_two_factor_authentication :
263+             ssh .connect (
264+                 hostname = self ._ssh_host ,
265+                 port = self ._ssh_port ,
266+                 username = self ._ssh_username ,
267+                 password = getpass .getpass (prompt = "SSH Password: " , stream = None ),
268+             )
250269        elif  (
251270            self ._ssh_password  is  not   None 
252271            and  self ._ssh_authenticator_service  is  not   None 
@@ -287,6 +306,16 @@ def authentication(title, instructions, prompt_list):
287306            ssh ._transport .auth_interactive_dumb (
288307                username = self ._ssh_username , handler = None , submethods = "" 
289308            )
309+         elif  self ._ssh_ask_for_password  and  self ._ssh_two_factor_authentication :
310+             ssh .connect (
311+                 hostname = self ._ssh_host ,
312+                 port = self ._ssh_port ,
313+                 username = self ._ssh_username ,
314+                 password = getpass .getpass (prompt = "SSH Password: " , stream = None ),
315+             )
316+             ssh ._transport .auth_interactive_dumb (
317+                 username = self ._ssh_username , handler = None , submethods = "" 
318+             )
290319        else :
291320            raise  ValueError ("Un-supported authentication method." )
292321
0 commit comments