mirror of
https://github.com/containers/podman.git
synced 2025-06-21 01:19:15 +08:00
Merge pull request #11440 from ashley-cui/ssh
Use default username for podman machine ssh
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
|
@ -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{}
|
||||||
|
@ -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"}
|
||||||
|
Reference in New Issue
Block a user