传递密码多个命令

时间:2016-05-11 10:35:52

标签: go ssh

我无法执行多个命令。

例如,在下面的场景中,我可以登录路由器并执行命令。

但我如何处理多个命令。

在我的情况下,我需要首先执行命令“启用”,传递密码然后运行命令“show clock”

这有什么例子吗?

package main

import (
    "byt

es"
       "golang.org/x/crypto/ssh"
        "fmt"
        "os"
        "time"
    )

    func executeCmd(cmd, hostname string, config *ssh.ClientConfig) string {
        conn, _ := ssh.Dial("tcp", hostname+":22", config)
        session, _ := conn.NewSession()
        defer session.Close()

        var stdoutBuf bytes.Buffer
        session.Stdout = &stdoutBuf
        session.Run(cmd)
        return hostname + ": " + stdoutBuf.String()
    }

        func main() {
            cmd := "show clock"
            hosts := os.Args[1:]
            results := make(chan string, 90)
            timeout := time.After(5 * time.Second)
           config := &ssh.ClientConfig{
                User: "test",
                Auth: []ssh.AuthMethod{
                    ssh.Password("test"),
                },
            }

            for _, hostname := range hosts {
                go func(hostname string) {
                    results <- executeCmd(cmd, hostname, config)
                }(hostname)
            }

            for i := 0; i < len(hosts); i++ {
                select {
                case res := <-results:
                    fmt.Print(res)
                case <-timeout:
                    fmt.Println("Timed out!")
                    return
                }
            }
        }

0 个答案:

没有答案