1 回答
TA贡献1780条经验 获得超5个赞
我自己解决了这个问题。据我了解,panic 是多个 goroutine 想使用 sshagent 连接本地服务器造成的。现在,我只设置一次连接,并保持连接直到程序结束。函数 main 中的代码:
//get config
var config *ssh.ClientConfig
if sshAgent, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK")); err == nil {
config = GetConfig(uname,sshAgent)
defer sshAgent.Close()
} else {
panic(err)
}
当我需要 goroutine 中的配置时,我将配置作为参数传递给它,它运行良好!
我在 goroutine 中的功能如下:
func RunInChannel(ch chan int, host,cmd string,config *ssh.ClientConfig) error{
result,_ := ExcuteRemote(host,cmd,config)
if result {
fmt.Println("\n" + host + "\t\tok\n")
} else {
ret,err := ExcuteRemote(host,cmd,config)
if ret {
fmt.Println("\n" + host + "\t\tok\n")
} else {
fmt.Println(err)
fmt.Println("\n" + host + "\t\tfailed\n")
}
}
ch <- 1
return nil
}
- 1 回答
- 0 关注
- 240 浏览
添加回答
举报