我无法执行多个命令。
例如,在下面的场景中,我可以登录路由器并执行命令。
但我如何处理多个命令。
在我的情况下,我需要首先执行命令“启用”,传递密码然后运行命令“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
}
}
}