为了账号安全,请及时绑定邮箱和手机立即绑定

golang ssh 将退格键写入标准输入

golang ssh 将退格键写入标准输入

Go
慕无忌1623718 2022-12-26 10:46:38
我正在编写一个 ssh 客户端来解析交换机的配置。这不是交互式客户端。在某些情况下,我需要删除部分先前键入的命令。如果我使用的是 PuTTY,我会通过按退格键或 Ctrl-X 键盘快捷键来完成。如何向服务器发送 Ctrl-X 或 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]))    }    ...}编辑: 问题是在显示输出后,命令仍然保持不变,因为我没有向标准输入写入“\n”。例如,如果我发送“display bla?” 我看到这个<some_switch>display bla ?blabla-bla...bla-bla-bla<some_switch>display bla如果我想看别的东西,我需要擦除“display bla”。问题是如何?PS对不起我的英语。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

非打印ASCII 符号必须与命令分开发送。如果没有输出,则无需读取标准输出。


//To write Ctrl-X

stdin.Write([]byte{0x18})


//Then send the command

stdin.Write([]byte(<command>))


//To write Backspace

stdin.Write([]byte{0x8})


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信