如何以编程方式在golang程序中输入字符到os.stdin

时间:2013-06-05 06:10:38

标签: command go

我想自动为bash终端中的命令提供输入。

是否可以以编程方式输入“是”而不是ssh提示符?这是一个代表这个想法的脚本。

package main
import (
    "bytes"
    "io"
    "os"
    "fmt"
    "os/exec"
 )
func main() {
    c1 := exec.Command("ssh","root@172.30.0.77")
    r, w := io.Pipe()
    c1.Stdout = w
    c1.Stdin = r
    c1.Start()
    var b bytes.Buffer
    b.Write([]byte("yes"))
    fmt.Fprintf(&b, "\n")
    b.WriteTo(os.Stdin)
    c1.Wait()
    w.Close()

 }

# go run login.go 
yes
The authenticity of host '172.30.0.77 (172.30.0.77)' can't be established.
RSA key fingerprint is 13:46:96:ff:ab:12:76:0e:24:6e:3e:7a:ee:c0:81:af.
Are you sure you want to continue connecting (yes/no)? 

1 个答案:

答案 0 :(得分:-2)

这在很多层面都是错误的,但让我选择最糟糕的一个。

许多程序通常都是出于很好的理由,尽力确保它们与人类交互,而不是重定向输入,这里是doc等。

试图颠覆这些非常好的理由是一个可怕的想法,恕我直言是一个很大的禁忌。

如果要以编程方式与ssh协议进行交互,请使用库(如果是Go,则为package),而不是客户端二进制文件。