【问题标题】:Exclude SSH Command Execution Status from Output从输出中排除 SSH 命令执行状态
【发布时间】:2017-08-09 05:59:09
【问题描述】:

我正在尝试使用 Go 语言开发 SSH 客户端。我编写了以下代码来从用户那里获取命令,在远程服务器上执行它们并打印响应。

下面的代码有一个小问题。在屏幕上打印输出在响应结束时打印命令执行状态(无/错误状态)。如何从我的输出中排除它?

SSH.go

package main

import "fmt"
import "io"
import "bufio"
import "os"
import "net"
import "golang.org/x/crypto/ssh"

func main(){

    sshConfig := &ssh.ClientConfig{
        User: "[USERNAME]",
        Auth: []ssh.AuthMethod{
            ssh.Password("[PASSWORD]"),
        },
        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    }

    connection,err := ssh.Dial("tcp", "[IP]:[PORT]", sshConfig)
    if err != nil {
        fmt.Println("Failed to connect: %s", err)
    }

    reader := bufio.NewReader(os.Stdin)

    for{
        input, _ := reader.ReadString('\n')
        session,err := connection.NewSession()
        if err != nil {
            fmt.Println("Failed to create session: %s", err)
        }
        stdout,err := session.StdoutPipe()
        if err != nil {
            fmt.Println("Failed to get stdout: %s", err)
        }
        go io.Copy(os.Stdout, stdout)
        output := session.Run(input);
        fmt.Println(output)
    }

}

当前结果

hello
Process exited with status 127
df -hP /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       198G   13G  176G   7% /
<nil>

预期结果

hello
df -hP /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       198G   13G  176G   7% /

【问题讨论】:

  • 也许你应该将stderr重定向到/dev/null
  • @armnotstrong - 语法是什么?
  • @Beginner 如果你把“redirect stderr to /dev/null”放到google会怎么样?

标签: go ssh


【解决方案1】:

上面标出的&lt;nil&gt;session.Run 的输出,它返回一个error(根据docs)。

该命令的输出已经通过以下 goroutine 显示在您的控制台上:

go io.Copy(os.Stdout, stdout)

您不需要打印output,即nil,因为当session.Run 调用完成时不会发生错误。更好的做法是检查错误:

// ...
if err := session.Run(input); err != nil {
  // handle error
}
// ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2021-05-20
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多