Merge pull request #11440 from ashley-cui/ssh

Use default username for podman machine ssh
This commit is contained in:
OpenShift Merge Robot
2021-09-13 14:34:29 -04:00
committed by GitHub
3 changed files with 45 additions and 2 deletions

View File

@ -3,6 +3,9 @@
package machine package machine
import ( import (
"net/url"
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/machine" "github.com/containers/podman/v3/pkg/machine"
"github.com/containers/podman/v3/pkg/machine/qemu" "github.com/containers/podman/v3/pkg/machine/qemu"
@ -44,6 +47,14 @@ func ssh(cmd *cobra.Command, args []string) error {
// Set the VM to default // Set the VM to default
vmName := defaultMachineName 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 // If len is greater than 0, it means we may have been
// provided the VM name. If so, we check. The VM name, // provided the VM name. If so, we check. The VM name,
// if provided, must be in args[0]. // if provided, must be in args[0].
@ -57,16 +68,25 @@ func ssh(cmd *cobra.Command, args []string) error {
if validVM { if validVM {
vmName = args[0] vmName = args[0]
} else { } else {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
sshOpts.Args = append(sshOpts.Args, args[0]) sshOpts.Args = append(sshOpts.Args, args[0])
} }
} }
} }
// If len is greater than 1, it means we might have been // If len is greater than 1, it means we might have been
// given a vmname and args or just args // given a vmname and args or just args
if len(args) > 1 { if len(args) > 1 {
if validVM { if validVM {
sshOpts.Args = args[1:] sshOpts.Args = args[1:]
} else { } else {
sshOpts.Username, err = remoteConnectionUsername()
if err != nil {
return err
}
sshOpts.Args = args sshOpts.Args = args
} }
} }
@ -80,3 +100,20 @@ func ssh(cmd *cobra.Command, args []string) error {
} }
return vm.SSH(vmName, sshOpts) 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
}

View File

@ -61,6 +61,7 @@ type ListResponse struct {
} }
type SSHOptions struct { type SSHOptions struct {
Username string
Args []string Args []string
} }
type StartOptions struct{} type StartOptions struct{}

View File

@ -488,7 +488,12 @@ func (v *MachineVM) SSH(name string, opts machine.SSHOptions) error {
return errors.Errorf("vm %q is not running.", v.Name) 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) port := strconv.Itoa(v.Port)
args := []string{"-i", v.IdentityPath, "-p", port, sshDestination, "-o", "UserKnownHostsFile /dev/null", "-o", "StrictHostKeyChecking no"} args := []string{"-i", v.IdentityPath, "-p", port, sshDestination, "-o", "UserKnownHostsFile /dev/null", "-o", "StrictHostKeyChecking no"}