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 後,放到$GOPATH/src/golang.org/x/目錄下面即可。
二、ssh登入程式碼
package main import ( "golang.org/x/crypto/ssh" "log" "os" ) func main() { ce := func(err error, msg string) { if err != nil { log.Fatalf("%s error: %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, "new session") defer session.Close() session.Stdout = os.Stdout session.Stderr = os.Stderr session.Stdin = os.Stdin modes := ssh.TerminalModes{ ssh.ECHO: 0, ssh.TTY_OP_ISPEED: 14400, ssh.TTY_OP_OSPEED: 14400, } err = session.RequestPty("linux", 32, 160, modes) ce(err, "request pty") err = session.Shell() ce(err, "start shell") err = session.Wait() ce(err, "return") }
程式碼執行後,發現可以正常切換到對應的使用者,而且命令重複輸出的問題也解決了, 但是tab不能補全命令,ps auxf檢視不能全屏的問題依然存在 。
三、ssh: must specify HostKeyCallback報錯解決
在執行上面的程式碼時可能會遇到ssh: must specify HostKeyCallback報錯,出現該問題的原因是沒有加如下行:
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
除了增加上面的程式碼能解決外,也可以增加如下程式碼解決:
//需要驗證服務端,不做驗證返回nil就可以,點選HostKeyCallback看原始碼就知道了 HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil },
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2285430/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- golang toolkits包的使用方法介紹Golang
- Golang Tools 介紹Golang
- JAVA SSH 框架介紹Java框架
- oracle 11g DBMS_SQLTUNE 包的使用方法介紹OracleSQL
- Golang : pflag 包簡介Golang
- Golang : cobra 包簡介Golang
- JAVA SSH 框架介紹(轉)Java框架
- Lombok介紹及使用方法Lombok
- Lombok介紹,使用方法及原理Lombok
- Ldd命令介紹及使用方法
- Audit 功能的使用方法介紹
- pytorch 包介紹PyTorch
- 介紹 golang net/http 原始碼GolangHTTP原始碼
- vuex詳細介紹和使用方法Vue
- domutils 工具庫的使用方法介紹
- javascript閉包概念介紹JavaScript
- Springmvc jar包介紹SpringMVCJAR
- Hanlp在ubuntu中的使用方法介紹HanLPUbuntu
- Android中SharedPreferences使用方法介紹Android
- golang實現常用集合原理介紹Golang
- golang 介紹以及踩坑之四Golang
- [譯] part 20: golang 併發介紹Golang
- golang-切片slice的基本介紹Golang
- DriverStudio工具包介紹
- 簡單介紹JavaScript閉包JavaScript
- SJL 開發包1.0介紹
- jQuery外掛Tmpl使用方法簡單介紹jQuery
- Golang指標基本介紹及使用案例Golang指標
- jar包、war包和ear包的介紹與區別JAR
- jar包和war包的介紹與區別JAR
- 簡單介紹SQL中ISNULL函式使用方法SQLNull函式
- SAP Cloud SDK for JavaScript 的搭建和使用方法介紹CloudJavaScript
- Deadmin 更新部分文件介紹快速使用方法
- Golang Label使用方法Golang
- RPM包安裝與介紹
- go 字串之 strings 包介紹Go字串
- CnPack IDE專家包介紹IDE
- Android API 開發包介紹AndroidAPI