新手遇到坑,想问大佬一个问题,panic: The handle is invalid.

howard99 · · 7692 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

#### 同一段代码,在linux 里运行正常, 在windows下面运行报 The handle is invalid. ![Capture.PNG](https://static.studygolang.com/190425/3eac479022d5a0e43e7fb40e85ee2e7d.PNG) #### 下面是源码 ```go package main import ( "go_ssh1/conn" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/terminal" "log" "os" ) func main() { session, err := conn.Connect("root", "xxx", "192.168.1.1", 22) if err != nil { log.Fatal(err) } defer session.Close() fd := int(os.Stdin.Fd()) oldState, err := terminal.MakeRaw(fd) // winodws 下MakeRam handle is invalid. if err != nil { panic(err) } defer terminal.Restore(fd, oldState) //excute command session.Stdout = os.Stdout session.Stderr = os.Stderr session.Stdin = os.Stdin termWidth, termHeight, err := terminal.GetSize(fd) if err != nil { panic(err) } //Set up terminal modes modes := ssh.TerminalModes{ ssh.ECHO: 1, ssh.TTY_OP_ISPEED: 14400, ssh.TTY_OP_OSPEED: 14400, } if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil { log.Fatal(err) } session.Run("top") } -------------------------------- connect.go import ( "fmt" "golang.org/x/crypto/ssh" "net" "time" ) func Connect(user, password, host string, port int) (*ssh.Session, error) { var ( auth []ssh.AuthMethod addr string clientConfig *ssh.ClientConfig client *ssh.Client session *ssh.Session err error ) // get auth method auth = make([]ssh.AuthMethod, 0) auth = append(auth, ssh.Password(password)) clientConfig = &ssh.ClientConfig{ User: user, Auth: auth, Timeout: 30 * time.Second, HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil }, } addr = fmt.Sprintf("%s:%d", host, port) if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil { return nil, err } if session, err = client.NewSession(); err != nil { return nil, err } return session, nil } ``` #### 谢谢!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7692 次点击  
加入收藏 微博
11 回复  |  直到 2022-06-19 22:36:34
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传