首页 > 解决方案 > Golang ssh 中断信号

问题描述

我正在开发一个简单的 ssh 客户端,它连接到多个远程主机并允许读取日志文件。我设法连接到我的远程机器并在我的远程机器上运行命令

stdin, err := session.StdinPipe()

if err != nil {
    log.Fatalf("Failed to establish stdin pipe: %v", err)
}

session.Stdout = os.Stdout
session.Stderr = os.Stderr

err = session.Shell()

if err != nil {
    log.Fatal(err)
}

reader := bufio.NewReader(os.Stdin)
for {
    text, _ := reader.ReadString('\n')

    if text == "exit\n" {
        break
    }

    if text == "br\n" {
        // ??? HOW ???
        continue
    }

    _, err = fmt.Fprintf(stdin, "%s", text)

    if err != nil {
        log.Fatal(err)
    }
}

当我运行时,tail -f access.tskv我会在我的标准输入上得到输出。我的问题是我无法弄清楚如何向远程机器上的外壳发送中断信号。

有任何想法吗?

标签: gossh

解决方案


session.Signal(ssh.SIGINT)应该根据 API 文档来解决问题。但由于某种原因,另一端没有触发信号。似乎问题出在 ubuntu 18.04 上的 sshd

https://github.com/golang/go/issues/16597#issuecomment-548053530


推荐阅读