Add username flag for machine ssh

allow users to specify what username to use when ssh-ing into the vm.
If the username flag is set, the username will be the flag value. If the
flag is not set and the the vm name is specified, the default user of
the vm will be used. if the flag is not set, and the vm name is not
specified, then the username of the default connection will be used.

Signed-off-by: Ashley Cui <acui@redhat.com>
This commit is contained in:
Ashley Cui
2021-09-16 15:17:02 -04:00
parent 9119a578e7
commit e3e9e5175f
2 changed files with 18 additions and 17 deletions

View File

@ -5,6 +5,7 @@ package machine
import (
"net/url"
"github.com/containers/common/pkg/completion"
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/machine"
@ -15,7 +16,7 @@ import (
var (
sshCmd = &cobra.Command{
Use: "ssh [NAME] [COMMAND [ARG ...]]",
Use: "ssh [options] [NAME] [COMMAND [ARG ...]]",
Short: "SSH into an existing machine",
Long: "SSH into a managed virtual machine ",
RunE: ssh,
@ -35,6 +36,10 @@ func init() {
Command: sshCmd,
Parent: machineCmd,
})
flags := sshCmd.Flags()
usernameFlagName := "username"
flags.StringVar(&sshOpts.Username, usernameFlagName, "", "Username to use when ssh-ing into the VM.")
_ = sshCmd.RegisterFlagCompletionFunc(usernameFlagName, completion.AutocompleteNone)
}
func ssh(cmd *cobra.Command, args []string) error {
@ -48,13 +53,6 @@ func ssh(cmd *cobra.Command, args []string) error {
// Set the VM to default
vmName := defaultMachineName
// If we're not given a VM name, use the remote username from the connection config
if len(args) == 0 {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
}
// If len is greater than 0, it means we may have been
// provided the VM name. If so, we check. The VM name,
// if provided, must be in args[0].
@ -68,10 +66,6 @@ func ssh(cmd *cobra.Command, args []string) error {
if validVM {
vmName = args[0]
} else {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
sshOpts.Args = append(sshOpts.Args, args[0])
}
}
@ -83,12 +77,15 @@ func ssh(cmd *cobra.Command, args []string) error {
if validVM {
sshOpts.Args = args[1:]
} else {
sshOpts.Args = args
}
}
if !validVM && sshOpts.Username == "" {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
sshOpts.Args = args
}
}
switch vmType {

View File

@ -4,7 +4,7 @@
podman\-machine\-ssh - SSH into a virtual machine
## SYNOPSIS
**podman machine ssh** [*name*] [*command* [*arg* ...]]
**podman machine ssh** [*options*] [*name*] [*command* [*arg* ...]]
## DESCRIPTION
@ -21,6 +21,10 @@ with the virtual machine is established.
Print usage statement.
#### **--username**=*name*
Username to use when SSH-ing into the VM.
## EXAMPLES
To get an interactive session with the default virtual machine: