не могу получить stderr из ssh - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь получить информацию об ошибке при запуске команды из ssh.Вот пример:

package main

import (
    "golang.org/x/crypto/ssh"
    "net"
)

func main() {
    config := &ssh.ClientConfig{
        User: "xx",
        Auth: []ssh.AuthMethod{
            ssh.Password("xxx"),
        },

        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    }

    sshClient, err := ssh.Dial("tcp", "x.x.x.x:22", config)
    if err != nil {
        panic(err.Error())
    }

    session, err := sshClient.NewSession()
    if err != nil {
        panic(err.Error())
    }

    data, err := session.CombinedOutput("ls2")
    if err != nil {
        // This prints : error = Process exited with status 127
        // Pos1
        print("error = " + err.Error())
        return
    }

    // Pos2
    content := string(data)
    println(content)
}

Я тестирую неправильную команду: ls2 и хочу получить фактическую информацию об ошибке "-bash: ls2: команда не найдена" в Pos2.Но эта тестовая программа завершилась неудачно в Pos1, и выведите «error = Процесс завершен со статусом 127», а это не то, что я хочу, потому что мне нужна фактическая информация.

1 Ответ

0 голосов
/ 28 ноября 2018

попробуйте вот так

session, err := sshClient.NewSession()
if err != nil {
    panic(err.Error())
}

defer session.Close()
data, err := session.CombinedOutput("ls2")
if err != nil {
    if v, ok := err.(*ssh.ExitError); ok {
        fmt.Println(v.Msg())
    }
}
fmt.Println(string(data))

и выдаст command not found: ls2

, проблемы можно увидеть здесь https://github.com/golang/go/issues/14251

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...