我正在尝试创建一个程序,它通过 ssh 连接到远程服务器并执行用户给出的命令。我在 os.stdin 上使用 os.TeeReader 来记录所有用户输入,但这会破坏 tty。
var bufferRead bytes.Buffer
sshstring:=user+"@"+host
cmd := exec.Command("ssh",sshstring,"-o StrictHostKeyChecking=no")
cmd.Stdout = os.Stdout
cmd.Stdin =io.TeeReader(os.Stdin,&bufferRead)
cmd.Stderr = os.Stderr
cmd.Run()
fmt.Printf("\nHistory: %s", &bufferRead)
我在使用损坏的 tty 执行时收到以下警告
不会分配伪终端,因为标准输入不是终端
最佳答案
使用 -T
ssh 选项。它必须禁用伪终端分配。
# some code here
cmd := exec.Command("ssh",sshstring,"-o StrictHostKeyChecking=no", "-T")
# some code here
有-t
选项,强制分配伪终端。
检查man ssh
关于os.stdin 上的 golang io.TeeReader 中断 tty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46829745/