mirror of
https://github.com/containers/podman.git
synced 2025-06-04 04:56:32 +08:00
Use default username for podman machine ssh
When using the defaut conection for podman machine ssh, use the default username too. Signed-off-by: Ashley Cui <acui@redhat.com>
This commit is contained in:
@ -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"
|
||||
@ -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].
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
|
@ -61,7 +61,8 @@ type ListResponse struct {
|
||||
}
|
||||
|
||||
type SSHOptions struct {
|
||||
Args []string
|
||||
Username string
|
||||
Args []string
|
||||
}
|
||||
type StartOptions struct{}
|
||||
|
||||
|
@ -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"}
|
||||
|
Reference in New Issue
Block a user