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 == "exitn" {
break
}
if text == "brn" {
// ??? HOW ???
continue
}
_, err = fmt.Fprintf(stdin, "%s", text)
if err != nil {
log.Fatal(err)
}
}

当我运行tail -f access.tskv时,我会在stdin上得到输出。我的问题是,我不知道如何向远程机器上的shell发送中断信号。

有什么想法吗?

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

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

为了向进程发送信号(假设您的远程主机是基于Unix的(,我们需要使用以下命令找到要发送信号的进程的进程ID:

ps aux | grep '[process-name]'

参考:https://www.cyberciti.biz/faq/linux-find-process-name/

一旦找到进程及其ID(通常是整数(,就可以运行以下命令向其发送信号

kill -SIGINT [PID]

参考:https://bash.cyberciti.biz/guide/Sending_signal_to_Processes

希望这能有所帮助!

最新更新