go - 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
我会在我的标准输入上得到输出。我的问题是我无法弄清楚如何向远程机器上的外壳发送中断信号。
有任何想法吗?
解决方案
session.Signal(ssh.SIGINT)
应该根据 API 文档来解决问题。但由于某种原因,另一端没有触发信号。似乎问题出在 ubuntu 18.04 上的 sshd
https://github.com/golang/go/issues/16597#issuecomment-548053530
推荐阅读
- python - 检查 Python 数据框中的列表是否包含特定值,同时忽略 NaN
- python - 当我在 Rust 中使用 pyo3 构建 python 库时出现错误“根目录中没有 py”
- c# - xamarin 发送的 Json 最后没有数据
- python - 有人可以告诉我如何解决这个错误,我正在使用 tensorflow fashion_mnish 数据集
- java - java.lang.ClassNotFoundException: org.elasticsearch.http.AbstractHttpServerTransport
- javascript - 使用 javascript 处理来自 express 服务器的表单提交响应
- firebase - 如何在 Flutter 的同一屏幕中管理两个带有数据的 ListView
- c# - C#继承模板和种姓
- ios - 集合视图中的水平滚动
- arrays - mongodb聚合两个数组请求