Skip to content

Commit

Permalink
Merge pull request #11440 from ashley-cui/ssh
Browse files Browse the repository at this point in the history
Use default username for podman machine ssh
  • Loading branch information
openshift-merge-robot authored Sep 13, 2021
2 parents 8fa3e6c + 7a667c4 commit f07a2bf
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
37 changes: 37 additions & 0 deletions cmd/podman/machine/ssh.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
package machine

import (
"net/url"

"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/machine"
"github.com/containers/podman/v3/pkg/machine/qemu"
Expand Down Expand Up @@ -44,6 +47,14 @@ 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].
Expand All @@ -57,16 +68,25 @@ 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])
}
}
}

// If len is greater than 1, it means we might have been
// given a vmname and args or just args
if len(args) > 1 {
if validVM {
sshOpts.Args = args[1:]
} else {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
sshOpts.Args = args
}
}
Expand All @@ -80,3 +100,20 @@ func ssh(cmd *cobra.Command, args []string) error {
}
return vm.SSH(vmName, sshOpts)
}

func remoteConnectionUsername() (string, error) {
cfg, err := config.ReadCustomConfig()
if err != nil {
return "", err
}
dest, _, err := cfg.ActiveDestination()
if err != nil {
return "", err
}
uri, err := url.Parse(dest)
if err != nil {
return "", err
}
username := uri.User.String()
return username, nil
}
3 changes: 2 additions & 1 deletion pkg/machine/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ type ListResponse struct {
}

type SSHOptions struct {
Args []string
Username string
Args []string
}
type StartOptions struct{}

Expand Down
7 changes: 6 additions & 1 deletion pkg/machine/qemu/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,12 @@ func (v *MachineVM) SSH(name string, opts machine.SSHOptions) error {
return errors.Errorf("vm %q is not running.", v.Name)
}

sshDestination := v.RemoteUsername + "@localhost"
username := opts.Username
if username == "" {
username = v.RemoteUsername
}

sshDestination := username + "@localhost"
port := strconv.Itoa(v.Port)

args := []string{"-i", v.IdentityPath, "-p", port, sshDestination, "-o", "UserKnownHostsFile /dev/null", "-o", "StrictHostKeyChecking no"}
Expand Down

0 comments on commit f07a2bf

Please sign in to comment.