我正在编写ssh客户端来解析交换机的配置。这不是一个交互式客户端。在某些情况下,我需要删除前面键入的命令的一部分。如果我使用的是PuTTY,我会按下backspace按钮或Ctrl键盘快捷键。
如何向服务器发送Ctrl或Backspace命令?我已经尝试过发送\b和0x08,在本例中,它不像预期的那样工作。
下面的示例代码没有错误处理等..。
拨号和书写:
c,_ := ssh.Dial( <dial ,_parameters> )
session, _= c.NewSession()
modes := ssh.TerminalModes{
ssh.ECHO: 0, // disable echoing
ssh.TTY_OP_ISPEED: 38400, // input speed = 14.4kbaud
ssh.TTY_OP_OSPEED: 38400, // output speed = 14.4kbaud
}
session.RequestPty("xterm", 80, 40, modes); err != nil {
return err
}
stdin, _ = session.StdinPipe()
stdin.Write([]byte( <command> ))阅读:
var buf = make([]byte, 1024)
for {
n, e := c.stdout.Read(buf)
if e != nil {
fmt.Println(e.Error())
break
}
if n != 0 {
fmt.Print(string(buf[:n]))
}
...
}编辑:问题是在显示输出之后,命令仍然保持不变,因为我没有向stdin写入"\n“。
例如,如果我要发送“显示bla ?”我看到了这个
<some_switch>display bla ?
bla
bla-bla
...
bla-bla-bla
<some_switch>display bla如果我想看别的东西,我需要擦去“显示蓝色”。问题是怎么做?
抱歉,我的英语。
发布于 2022-06-26 18:32:43
非打印ASCII符号必须与命令分开发送。如果没有输出,就不需要读取stdout。
//To write Ctrl-X
stdin.Write([]byte{0x18})
//Then send the command
stdin.Write([]byte(<command>))
//To write Backspace
stdin.Write([]byte{0x8})https://stackoverflow.com/questions/72728419
复制相似问题