这篇文章主要讲解了“golang的ssh包如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang的ssh包如何使用”吧!

在使用gexpect包发现很多问题之外,这里又尝试使用ssh user@127.0.0.1的思路进行用户切换。这里记录下具体的使用方法,遇到的ssh: must specify HostKeyCallback 问题的解法方法及最终使用过程中的问题。

一、ssh包crypto的安装

ssh使用的包为”golang.org/x/crypto/ssh”,由于golang.org被墙了,所以这里使用github上的镜像版本,所以这里不能使用go get进行安装(不要使用go get,不要使用go get,不要使用go get)。使用方法为git clone https://github.com/golang/crypto.git后,放到$GOPATH/src/golang.org/x/目录下面即可。

二、ssh登录代码

packagemainimport("golang.org/x/crypto/ssh""log""os")funcmain(){ce:=func(errerror,msgstring){iferr!=nil{log.Fatalf("%serror:%v",msg,err)}}client,err:=ssh.Dial("tcp","127.0.0.1:22",&ssh.ClientConfig{User:"zabbix",Auth:[]ssh.AuthMethod{ssh.Password("123456")},HostKeyCallback:ssh.InsecureIgnoreHostKey(),})ce(err,"dial")session,err:=client.NewSession()ce(err,"newsession")defersession.Close()session.Stdout=os.Stdoutsession.Stderr=os.Stderrsession.Stdin=os.Stdinmodes:=ssh.TerminalModes{ssh.ECHO:0,ssh.TTY_OP_ISPEED:14400,ssh.TTY_OP_OSPEED:14400,}err=session.RequestPty("linux",32,160,modes)ce(err,"requestpty")err=session.Shell()ce(err,"startshell")err=session.Wait()ce(err,"return")}

代码执行后,发现可以正常切换到对应的用户,而且命令重复输出的问题也解决了,但是tab不能补全命令,ps auxf查看不能全屏的问题依然存在。

三、ssh: must specify HostKeyCallback报错解决

在执行上面的代码时可能会遇到ssh: must specify HostKeyCallback报错,出现该问题的原因是没有加如下行:

HostKeyCallback:ssh.InsecureIgnoreHostKey(),

除了增加上面的代码能解决外,也可以增加如下代码解决:

//需要验证服务端,不做验证返回nil就可以,点击HostKeyCallback看源码就知道了HostKeyCallback:func(hostnamestring,remotenet.Addr,keyssh.PublicKey)error{returnnil},

感谢各位的阅读,以上就是“golang的ssh包如何使用”的内容了,经过本文的学习后,相信大家对golang的ssh包如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!