因为是初学者,很粗糙的一段命令,下面的局部代码
package main
import (
"golang.org/x/crypto/ssh"
……
//执行命令
for _, ip := range ipAddresses {
localWg := &sync.WaitGroup{}
localWg.Add(1)
go func(ip string) {
defer localWg.Done()
localIP := ip
username := config.Username
password := config.Password
config := &ssh.ClientConfig{
Config: ssh.Config{
Ciphers: []string{"aes128-ctr", "aes192-ctr", "aes256-ctr", "aes128-gcm@openssh.com", "arcfour256", "arcfour128", "aes128-cbc", "3des-cbc", "aes192-cbc", "aes256-cbc"},
},
User:username,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
client, err := ssh.Dial("tcp",localIP+":22", config)
if err != nil {
log.Println("建立ssh连接错误:", err)
return
}
defer client.Close()
go HandleSession(client, commands,&wg)
}(ip)
localWg.Wait()
}
}
这段代码主要通过 SSH 协议登录多个交换机,并在这些设备上执行一组命令。代码的主要流程如下:
- 读取登录文件、IP文件和命令文件:
- 读取登录文件,获取 SSH 连接需要的用户名和密码。(
- 读取 IP 文件,获取要登录的多个远程主机的 IP 地址。
- 读取命令文件,获取要在远程主机上执行的命令。
- 执行命令:
- 对于每个远程主机,创建一个 goroutine 进行 SSH 登录,并在远程主机上执行命令。
- 在远程主机上创建 SSH session,并设置标准输入、标准输出和错误输出。
- 将命令写入标准输入,等待 session 结束。
在本地电脑上测试登录是正常的,使用CMD的ssh也能直接登录设备,但执行命令的时候,就出现了
: no such host 建立ssh连接错误: dial tcp: lookup X.X.X.X文章来源:https://www.toymoban.com/news/detail-416315.html
建立ssh连接错误: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain文章来源地址https://www.toymoban.com/news/detail-416315.html
到了这里,关于go 执行ssh 批量登录执行命令,返回了dial tcp: lookup : no such host 建立ssh连接错误: ssh: handshake failed: ssh: una的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!