Выполнить с sh в golang - PullRequest
       20

Выполнить с sh в golang

0 голосов
/ 18 апреля 2020

Я ищу способ запуска s sh в терминале из программы golang.

func main() {
    cmd := exec.Command("ssh", "user@192.168.0.17", "-p", "2222")
    err := cmd.Run()
    if err != nil {
            panic(err)
    }
}

Это прекрасно работает, пока я не введу правильный пароль, затем программа завершится. Я предполагаю, что при аутентификации запускается другой скрипт s sh, но я не могу понять, как это решить. Я искал некоторую информацию об этом, но все, что я нашел, это как создать сеанс как sh в go, и я хотел бы избежать этого, если это возможно.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вы должны передать stdin, stdout и stderr:

package main

import (
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("ssh", "user@192.168.0.17", "-p", "2222")
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    err := cmd.Run()
    if err != nil {
        panic(err)
    }
}
0 голосов
/ 18 апреля 2020

Я нашел другой способ решить мою проблему, используя:

binary, lookErr := exec.LookPath("ssh")
if lookErr != nil {
    panic(lookErr)
}
syscall.Exec(binary, []string{"ssh", "user@192.168.0.17", "-p", "2222"}, os.Environ())

Это закроет процесс программы и запустит s sh на другом. Спасибо за помощь!

...