V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dzdh
V2EX  ›  Go 编程语言

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

  •  
  •   dzdh · 2022-12-26 21:22:47 +08:00 · 1533 次点击
    这是一个创建于 701 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 直接主进程退了。

    3 条回复    2022-12-26 21:39:35 +08:00
    chuhades
        1
    chuhades  
       2022-12-26 21:29:15 +08:00   ❤️ 1
    关键词 tty raw mode
    heiher
        2
    heiher  
       2022-12-26 21:30:08 +08:00 via Android   ❤️ 1
    chuhades
        3
    chuhades  
       2022-12-26 21:39:35 +08:00   ❤️ 1
    是的。以前写的相关的玩意:

    ```
    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;
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3413 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:26 · PVG 19:26 · LAX 03:26 · JFK 06:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.