@@ -4461,26 +4461,30 @@ def get_parser(self, prog_name):
44614461 metavar = '<server>' ,
44624462 help = _ ('Server (name or ID)' ),
44634463 )
4464+ # Deprecated during the Yoga cycle
44644465 parser .add_argument (
44654466 '--login' , '-l' ,
44664467 metavar = '<login-name>' ,
4467- help = _ ( 'Login name (ssh -l option)' ) ,
4468+ help = argparse . SUPPRESS ,
44684469 )
4470+ # Deprecated during the Yoga cycle
44694471 parser .add_argument (
44704472 '--port' , '-p' ,
44714473 metavar = '<port>' ,
44724474 type = int ,
4473- help = _ ( 'Destination port (ssh -p option)' ) ,
4475+ help = argparse . SUPPRESS ,
44744476 )
4477+ # Deprecated during the Yoga cycle
44754478 parser .add_argument (
44764479 '--identity' , '-i' ,
44774480 metavar = '<keyfile>' ,
4478- help = _ ( 'Private key file (ssh -i option)' ) ,
4481+ help = argparse . SUPPRESS ,
44794482 )
4483+ # Deprecated during the Yoga cycle
44804484 parser .add_argument (
44814485 '--option' , '-o' ,
44824486 metavar = '<config-options>' ,
4483- help = _ ( 'Options in ssh_config(5) format (ssh -o option)' ) ,
4487+ help = argparse . SUPPRESS ,
44844488 )
44854489 ip_group = parser .add_mutually_exclusive_group ()
44864490 ip_group .add_argument (
@@ -4521,53 +4525,85 @@ def get_parser(self, prog_name):
45214525 default = 'public' ,
45224526 help = _ ('Use other IP address (public, private, etc)' ),
45234527 )
4528+ # Deprecated during the Yoga cycle
45244529 parser .add_argument (
45254530 '-v' ,
45264531 dest = 'verbose' ,
45274532 action = 'store_true' ,
45284533 default = False ,
45294534 help = argparse .SUPPRESS ,
45304535 )
4536+ parser .add_argument (
4537+ 'ssh_args' ,
4538+ nargs = '*' ,
4539+ metavar = '-- <standard ssh args>' ,
4540+ help = (
4541+ 'Any argument or option that ssh allows. '
4542+ 'Use -- once between openstackclient args and SSH args.'
4543+ ),
4544+ )
45314545 return parser
45324546
45334547 def take_action (self , parsed_args ):
45344548
45354549 compute_client = self .app .client_manager .compute
4550+
45364551 server = utils .find_resource (
45374552 compute_client .servers ,
45384553 parsed_args .server ,
45394554 )
45404555
4541- # Build the command
4542- cmd = "ssh"
4556+ # first, handle the deprecated options
4557+ if any ((
4558+ parsed_args .port ,
4559+ parsed_args .identity ,
4560+ parsed_args .option ,
4561+ parsed_args .login ,
4562+ parsed_args .verbose ,
4563+ )):
4564+ msg = _ (
4565+ 'The ssh options have been deprecated. The ssh equivalent '
4566+ 'options can be used instead as arguments after "--" on '
4567+ 'the command line.'
4568+ )
4569+ self .log .warning (msg )
45434570
45444571 ip_address_family = [4 , 6 ]
45454572 if parsed_args .ipv4 :
45464573 ip_address_family = [4 ]
4547- cmd += " -4"
45484574 if parsed_args .ipv6 :
45494575 ip_address_family = [6 ]
4550- cmd += " -6"
4576+
4577+ args = parsed_args .ssh_args [:]
45514578
45524579 if parsed_args .port :
4553- cmd += " -p %d" % parsed_args .port
4580+ args .extend (['-p' , str (parsed_args .port )])
4581+
45544582 if parsed_args .identity :
4555- cmd += " -i %s" % parsed_args .identity
4583+ args .extend (['-i' , parsed_args .identity ])
4584+
45564585 if parsed_args .option :
4557- cmd += " -o %s" % parsed_args .option
4586+ args .extend (['-o' , parsed_args .option ])
4587+
45584588 if parsed_args .login :
45594589 login = parsed_args .login
4560- else :
4590+ args .extend (['-l' , login ])
4591+ elif '-l' not in args :
45614592 login = self .app .client_manager .auth_ref .username
4593+ args .extend (['-l' , login ])
4594+
45624595 if parsed_args .verbose :
4563- cmd += " -v"
4564-
4565- cmd += " %s@%s"
4566- ip_address = _get_ip_address (server .addresses ,
4567- parsed_args .address_type ,
4568- ip_address_family )
4569- LOG .debug ("ssh command: %s" , (cmd % (login , ip_address )))
4570- os .system (cmd % (login , ip_address ))
4596+ args .append ('-v' )
4597+
4598+ ip_address = _get_ip_address (
4599+ server .addresses ,
4600+ parsed_args .address_type ,
4601+ ip_address_family ,
4602+ )
4603+
4604+ cmd = ' ' .join (['ssh' , ip_address ] + args )
4605+ LOG .debug ("ssh command: {cmd}" .format (cmd = cmd ))
4606+ os .system (cmd )
45714607
45724608
45734609class StartServer (command .Command ):
0 commit comments