我正在尝试创建一个程序,它通过ssh连接到远程服务器并执行user.i给出的命令。在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
的警告由于stdin不是终端,因此不会分配伪终端
答案 0 :(得分:1)
使用-T
ssh选项。它必须禁用伪终端分配。
# some code here
cmd := exec.Command("ssh",sshstring,"-o StrictHostKeyChecking=no", "-T")
# some code here
有-t
选项,强制伪终端分配。
检查man ssh