SSH 怎么发送本地的信号到远端

2022-12-26 21:22:47 +08:00
 dzdh
func main() {

	client, err := ssh.Dial("tcp", "ip:22", config)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	session, err := client.NewSession()
	if err != nil {
		panic(err)
	}
	defer session.Close()


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

	session.RequestPty("xterm", h, w, ssh.TerminalModes{
		ssh.ECHO:          0,
		ssh.TTY_OP_ISPEED: 14400,
		ssh.TTY_OP_OSPEED: 14400,
		ssh.IXANY:         1,
		ssh.IMAXBEL:       1,
	})

	session.Shell()

	session.Wait()
}

连接正常。但是打开 htop q 没反应,pageup/down 没反应。ctrl-c 直接主进程退了。

1532 次点击
所在节点    Go 编程语言
3 条回复
chuhades
2022-12-26 21:29:15 +08:00
关键词 tty raw mode
heiher
2022-12-26 21:30:08 +08:00
chuhades
2022-12-26 21:39:35 +08:00
是的。以前写的相关的玩意:

```
if (tcgetattr(1, &t) != 0) {
perror("tcgetattr");
goto out;
}
t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO);
t.c_iflag &= ~(BRKINT | ICRNL | IGNBRK | IGNCR | INLCR | INPCK | ISTRIP | IXON | PARMRK);
t.c_oflag &= ~OPOST;
t.c_cc[VMIN] = 1;
t.c_cc[VTIME] = 0;
if (tcsetattr(1, TCSAFLUSH, &t) != 0) {
perror("tcsetattr");
goto out;
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/904828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX