go 通过ssh连接linux golang.org/x/crypto/ssh

发布时间:2026/7/14 14:07:12

go 通过ssh连接linux golang.org/x/crypto/ssh ssh.Dialgolang.org/x/crypto/sshpackage main import ( bytes log os strings golang.org/x/term golang.org/x/crypto/ssh ) // go ssh 连接ssh // 参考blog // // https://www.cnblogs.com/zhzhlong/p/12552410.html // https://blog.csdn.net/Naisu_kun/article/details/130598129 func main() { log.Println(main ...) client, err : ssh.Dial(tcp, IP地址:22或者其他端口, ssh.ClientConfig{ User: root或者其他用户名, Auth: []ssh.AuthMethod{ssh.Password(密码)}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }) if err ! nil { log.Fatalf(SSH dial error: %s, err.Error()) } session, err : client.NewSession() if err ! nil { log.Fatalf(new session error: %s, err.Error()) } // session run执行命令 var b bytes.Buffer session.Stdout b if err : session.Run(pwd); err ! nil { log.Fatalln(Failed to run: err.Error()) } log.Println(strings.Trim(string(b.String()), \n)) session.Close() // session执行Output命令 session, _ client.NewSession() result, err : session.Output(pwd) if err ! nil { log.Fatalln(Failed to run command, Err:, err.Error()) } log.Println(strings.Trim(string(result), \n)) session.Close() // 模拟terminal session, _ client.NewSession() // 会话输出关联到系统标准输出设备 session.Stdout os.Stdout // 会话错误输出关联到系统标准错误输出设备 session.Stderr os.Stderr // 会话输入关联到系统标准输入设备 session.Stdin os.Stdin // 设置终端参数 modes : ssh.TerminalModes{ ssh.ECHO: 0, // 禁用回显0禁用1启动 ssh.TTY_OP_ISPEED: 14400, // input speed 14.4kbaud ssh.TTY_OP_OSPEED: 14400, //output speed 14.4kbaud } // 获取当前标准输出终端窗口尺寸 // 该操作可能有的平台上不可用那么下面手动指定终端尺寸即可 termWidth, termHeight, err : term.GetSize(int(os.Stdout.Fd())) if err ! nil { log.Fatal(unable to terminal.GetSize: , err) } // 设置虚拟终端与远程会话关联 if err session.RequestPty(linux, termHeight, termWidth, modes); err ! nil { log.Fatalf(request pty error: %s, err.Error()) } // 启动远程Shell if err session.Shell(); err ! nil { log.Fatalf(start shell error: %s, err.Error()) } // 启动远程Shell if err session.Wait(); err ! nil { log.Fatalf(return error: %s, err.Error()) } log.Println(success ..) }

相关新闻