summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/podman/machine/ssh.go36
1 files changed, 29 insertions, 7 deletions
diff --git a/cmd/podman/machine/ssh.go b/cmd/podman/machine/ssh.go
index a0656d17b..32483f731 100644
--- a/cmd/podman/machine/ssh.go
+++ b/cmd/podman/machine/ssh.go
@@ -12,22 +12,33 @@ import (
var (
sshCmd = &cobra.Command{
- Use: "ssh NAME",
- Short: "SSH into a virtual machine",
- Long: "SSH into a podman-managed virtual machine ",
- RunE: ssh,
- Args: cobra.ExactArgs(1),
- Example: `podman machine ssh myvm`,
+ Use: "ssh [options] NAME [COMMAND [ARG ...]]",
+ Short: "SSH into a virtual machine",
+ Long: "SSH into a podman-managed virtual machine ",
+ RunE: ssh,
+ Args: cobra.MinimumNArgs(1),
+ Example: `podman machine ssh myvm
+ podman machine ssh -e myvm echo hello`,
+
ValidArgsFunction: completion.AutocompleteNone,
}
)
+var (
+ sshOpts machine.SSHOptions
+)
+
func init() {
registry.Commands = append(registry.Commands, registry.CliCommand{
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
Command: sshCmd,
Parent: machineCmd,
})
+
+ flags := sshCmd.Flags()
+ executeFlagName := "execute"
+ flags.BoolVarP(&sshOpts.Execute, executeFlagName, "e", false, "Execute command from args")
+ _ = sshCmd.RegisterFlagCompletionFunc(executeFlagName, completion.AutocompleteDefault)
}
func ssh(cmd *cobra.Command, args []string) error {
@@ -36,6 +47,17 @@ func ssh(cmd *cobra.Command, args []string) error {
vm machine.VM
vmType string
)
+ sshOpts.Args = args[1:]
+
+ // Error if no execute but args given
+ if !sshOpts.Execute && len(sshOpts.Args) > 0 {
+ return errors.New("too many args: to execute commands via ssh, use -e flag")
+ }
+ // Error if execute but no args given
+ if sshOpts.Execute && len(sshOpts.Args) < 1 {
+ return errors.New("must proivde at least one command to execute")
+ }
+
switch vmType {
default:
vm, err = qemu.LoadVMByName(args[0])
@@ -43,5 +65,5 @@ func ssh(cmd *cobra.Command, args []string) error {
if err != nil {
return errors.Wrapf(err, "vm %s not found", args[0])
}
- return vm.SSH(args[0], machine.SSHOptions{})
+ return vm.SSH(args[0], sshOpts)
}