新手遇到坑,想问大佬一个问题,panic: The handle is invalid.
#### 同一段代码,在linux 里运行正常, 在windows下面运行报 The handle is invalid.

#### 下面是源码
```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
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
}
```
#### 谢谢!
...全文
相关推荐
打开vs提示invalid handle
在IT领域,遇到“打开vs提示invalid handle”的问题并不罕见,这通常意味着Visual Studio(简称VS)在尝试访问某些资源或执行特定操作时遇到了错误。
内核崩溃和OOPS有什么区别,怎么分析处理
Oops 是 Linux 内核报告**非法操作(Invalid Operation)**的标准化日志信息。当内核(或驱动)试图访问非法内存地址(如空指针解引用 NULL)、执行非法指令或访问权限不足的区域时,内核会抛出 Oops。表现形式:你会看到系统打印出一大堆寄存器和调用栈(Call Trace),通常包含或等关键词。核心特征(与 Panic 的本质区别):抛出 Oops 时,系统内核上下文并未被完全破坏。内核会杀死导致错误的那个进程,释放资源,然后尝试继续运行。
memory leakge & initialization & invalid pointer
Handle all possible exceptions and ensure that all resources are released before exiting the function
FindFirstFile
Get Last Error reports %d\n", GetLastError()); } else { printf("The first file found is %s.
UPnP_Programming_Guide
Occurs when an invalid handle is passed to a function.- **4.1.3** `UPNP_E_INVALID_PARAM [-101]`: Signals


其他技术讨论专区
