初学 Golang,打算用它写个服务器批量执行命令的程序,在远程 ssh 登录的时候出现了报错:ssh: handshake failed: EOF

报错信息:
Golang SSH 远程:ssh: handshake failed: EOF

演示代码

  • package main
  • import (
  • “fmt”
  • “golang.org/x/crypto/ssh”
  • “log”
  • “time”
  • )
  • func main() {
  • sshHost := “10.0.88.66”
  • sshUser := “root”
  • sshPassword := “123456”
  • sshType := “password” //password 或者 key
  • sshPort := 22
  • ////创建sshp登陆配置
  • config := &ssh.ClientConfig{
  • Timeout: time.Second * 3,
  • User: sshUser,
  • HostKeyCallback: ssh.InsecureIgnoreHostKey(), //这个可以, 但是不够安全
  • //HostKeyCallback: hostKeyCallBackFunc(h.Host),
  • }
  • if sshType == “password” {
  • config.Auth = []ssh.AuthMethod{ssh.Password(sshPassword)}
  • }
  • //dial 获取ssh client
  • addr := fmt.Sprintf(“%s:%d”, sshHost, sshPort)
  • sshClient, err := ssh.Dial(“tcp”, addr, config)
  • if err != nil {
  • log.Fatal(“创建ssh client 失败”, err)
  • }
  • defer sshClient.Close()
  • //创建ssh-session
  • session, err := sshClient.NewSession()
  • if err != nil {
  • log.Fatal(“创建ssh session 失败”, err)
  • }
  • defer session.Close()
  • //执行远程命令
  • combo, err := session.CombinedOutput(“ls -lh”)
  • if err != nil {
  • log.Fatal(“远程执行cmd 失败”, err)
  • }
  • log.Println(“命令输出:”, string(combo))
  • }

解决办法:
ssh 虽然经常用,但协议层面我了解不多;出现这个问题的原因好像挺多的,如果你也遇到,可以尝试换个加密算法;
在配置里面更换一种算法,成功解决问题,希望能够帮到您。

  • config.Ciphers = append(config.Ciphers, “aes128-ctr”)