Skip to content

Commit

Permalink
Use default username for podman machine ssh
Browse files Browse the repository at this point in the history
When using the defaut conection for podman machine ssh, use the default
username too.

Signed-off-by: Ashley Cui <[email protected]>
  • Loading branch information
ashley-cui authored and mheon committed Sep 20, 2021
1 parent 807861f commit d4d9bcc
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 @@ -45,6 +48,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 @@ -58,16 +69,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 @@ -81,3 +101,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 @@ -485,7 +485,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 d4d9bcc

Please sign in to comment.