您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)怎么在golang中利用ssh連接服務(wù)器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
1. 發(fā)送指令執(zhí)行 session.Run()
package main import ( "bytes" "fmt" "golang.org/x/crypto/ssh" "log") func main() { // 建立SSH客戶端連接 client, err := ssh.Dial("tcp", "127.0.0.1:2222", &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("123456")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }) if err != nil { log.Fatalf("SSH dial error: %s", err.Error()) } // 建立新會(huì)話 session, err := client.NewSession() if err != nil { log.Fatalf("new session error: %s", err.Error()) } defer session.Close() var b bytes.Buffer session.Stdout = &b if err := session.Run("ls"); err != nil { panic("Failed to run: " + err.Error()) } fmt.Println(b.String()) }
2. 發(fā)送指令執(zhí)行 session.Output()
session.run(command)是直接在host執(zhí)行命令,不關(guān)心執(zhí)行結(jié)果。session.Output是將執(zhí)行命令之后的Stdout返回
package main import ( "fmt" "golang.org/x/crypto/ssh" "log" "os") func test() { // 建立SSH客戶端連接 client, err := ssh.Dial("tcp", "127.0.0.1:2222", &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("123456")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }) if err != nil { log.Fatalf("SSH dial error: %s", err.Error()) } // 建立新會(huì)話 session, err := client.NewSession() defer session.Close() if err != nil { log.Fatalf("new session error: %s", err.Error()) } result, err := session.Output("ls -al") if err != nil { fmt.Fprintf(os.Stdout, "Failed to run command, Err:%s", err.Error()) os.Exit(0) } fmt.Println(string(result)) }
3. 模擬交互terminal
package main import ( "golang.org/x/crypto/ssh" "log" "os") func main() { // 建立SSH客戶端連接 client, err := ssh.Dial("tcp", "127.0.0.1:2222", &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("123456")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }) if err != nil { log.Fatalf("SSH dial error: %s", err.Error()) } // 建立新會(huì)話 session, err := client.NewSession() defer session.Close() if err != nil { log.Fatalf("new session error: %s", err.Error()) } session.Stdout = os.Stdout // 會(huì)話輸出關(guān)聯(lián)到系統(tǒng)標(biāo)準(zhǔn)輸出設(shè)備 session.Stderr = os.Stderr // 會(huì)話錯(cuò)誤輸出關(guān)聯(lián)到系統(tǒng)標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備 session.Stdin = os.Stdin // 會(huì)話輸入關(guān)聯(lián)到系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備 modes := ssh.TerminalModes{ ssh.ECHO: 0, // 禁用回顯(0禁用,1啟動(dòng)) ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud ssh.TTY_OP_OSPEED: 14400, //output speed = 14.4kbaud } if err = session.RequestPty("linux", 32, 160, modes); err != nil { log.Fatalf("request pty error: %s", err.Error()) } if err = session.Shell(); err != nil { log.Fatalf("start shell error: %s", err.Error()) } if err = session.Wait(); err != nil { log.Fatalf("return error: %s", err.Error()) } }
禁用回顯:
//如果不禁用回顯 [root@65a9c031a770 ~]# ls ls anaconda-ks.cfg //禁用回顯 [root@65a9c031a770 ~]# ls anaconda-ks.cfg
golang 是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言,其語法與 C語言相近,但并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能。
關(guān)于怎么在golang中利用ssh連接服務(wù)器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。