os.stdin 上的 golang io.TeeReader 中断 tty

标签 go

我正在尝试创建一个程序,它通过 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/

相关文章:

go - 在 Golang 中验证语言环境字符串

go - 从 Golang 中的 AWS Lambda 函数读取参数

go - golang 中是否有惯用的作用域语义?

mysql - 允许 CleartextPasswords=1 到 DSN

git - go get -u 模块不使用私有(private)仓库但 go get 工作

go - 这个满足错误接口(interface)的结构的 nil 实例没有显示为 nil

go - Go中的光标键终端输入

python - 如何确保函数在 Go 中花费一定的时间?

go - 如何将动态 JSON 响应映射到 GO 结构?

go - 为什么我在 for 循环的函数末尾缺少返回值