大本营:https://blog.csdn.net/HYZX_9987
使用连接ssh的golang.org/x/crypto/ssh包时报这个错,是什么原因?
注意箭头所指的字段,正确代码:
package main
import (
"fmt"
"log"
"net"
"os"
"time"
"golang.org/x/crypto/ssh"
)
func main() {
session, err := connect("xxx", "xxx", "192.168.xxx.xxx", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("ls /; ls mariadb/")
}
func connect(user, password, host string, port int) (*ssh.Session, error) {
var (
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
)
clientConfig = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
Timeout: 30 * time.Second,
HostKeyCallback:func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
}
// create session
if session, err = client.NewSession(); err != nil {
return nil, err
}
return session, nil
}
为什么是这个字段?看源码
// HostKeyCallback is the function type used for verifying server
// keys. A HostKeyCallback must return nil if the host key is OK, or
// an error to reject it. It receives the hostname as passed to Dial
// or NewClientConn. The remote address is the RemoteAddr of the
// net.Conn underlying the SSH connection.
type HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error