gpt4 book ai didi

process - Golang 写入输入并从终端进程获取输出

转载 作者:IT王子 更新时间:2023-10-29 02:00:04 25 4
gpt4 key购买 nike

我有一个关于如何从终端子进程(例如 ssh)发送输入和接收输出的问题。 python 中的一个例子是这样的:

how to give subprocess a password and get stdout at the same time

我在 Golang 中找不到与上述工作方式类似的简单示例。

在 Golang 中,我想做这样的事情,但它似乎不起作用:

    cmd := exec.Command("ssh", "user@x.x.x.x")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
stdin, _ := cmd.StdinPipe()
stdin.Write([]byte("password\n"))
cmd.Run()

但是;我不确定如何执行此操作,因为每次我执行此 ssh 命令时,我都只能获得输出。我无法从代码自动输入密码。有没有人有写入ssh等终端进程的例子?如果是这样,请分享。

最佳答案

感谢上面的评论,我能够使用密码进行 ssh 访问。我使用了 golang 的 ssh api 库。这相当简单,因为我遵循了以下示例:

https://code.google.com/p/go/source/browse/ssh/example_test.go?repo=crypto

具体来说:

func ExampleDial() {
// An SSH client is represented with a ClientConn. Currently only
// the "password" authentication method is supported.
//
// To authenticate with the remote server you must pass at least one
// implementation of AuthMethod via the Auth field in ClientConfig.
config := &ClientConfig{
User: "username",
Auth: []AuthMethod{
Password("yourpassword"),
},
}
client, err := Dial("tcp", "yourserver.com:22", config)
if err != nil {
panic("Failed to dial: " + err.Error())
}

// Each ClientConn can support multiple interactive sessions,
// represented by a Session.
session, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
defer session.Close()

// Once a Session is created, you can execute a single command on
// the remote side using the Run method.
var b bytes.Buffer
session.Stdout = &b
if err := session.Run("/usr/bin/whoami"); err != nil {
panic("Failed to run: " + err.Error())
}
fmt.Println(b.String())
}

关于process - Golang 写入输入并从终端进程获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com