如何使用Go語言實現遠端執行命令

2022-09-24 21:06:19 字數 2318 閱讀 3346

前言

遠端執行命令有什麼用?為什麼要遠端執行命令wgrgtkdtxn? 如果你只有2,3臺伺服器需要管理的時候,遠端執行命令確實沒有沒多大作用,你可以登入到每台伺服器上去完成各種操作。 當你的伺服器大於3臺的時候,遠端執行的命令的方式就可以大大提高你的生產力了。

如果你有乙個可以遠端執行命令的工具,那麼就可以像操作單台機器那樣操作多台機器,機器越多,效率提高的越多。 遠端執行命令最常用的方法就是利用 ssh 協議,將命令傳送到遠端機器上執行,並獲取返回結果。

一般命令

所謂一般命令,就是在一定時間內會執行完的命令。比如 grep, cat 等等。 執行命令的步驟是:連線,執行,獲取結果

連線連線包含了認證,可以使用 password 或者 sshkey 2種方式來認證。下面的示例為了簡單,使用了密碼認證的方式來完成連線。

import (

"fmt"

"time"

"golang.org/x/crypto/ssh"

)func connect(user, password, host string, port int) (*ssh.session, error)

// connet to ssh

addr = fmt.sprintf("%s:%d", host, port)

if client, err = ssh.dial("tcp", addr, clientconfig); err != nil

// create session

if session, err = client.newsession(); err != nil

return session, nil

}連線的方法很簡單,只要提供登入主機的 使用者*, *密碼*, *主機名或者ip*, *ssh埠

執行,命令獲取結果

連線成功後,執行命令很簡單

import (

"fmt"

"log"

"os"

"time"

"gwgrgtkdtxnolang.org/x/crypto/ssh"

)func main()

defer session.close()

session.run("ls /; ls /abc")

}上面**執行之後,雖然命令正常執行了,但是沒有正常輸出的結果,也沒有異常輸出的結果。 要想顯示結果,需要將 session 的 stdout 和 stderr 重定向 修改 func main 為如下:

func main()

defer session.close()

session.stdout = os.stdout

session.stderr = os.stderr

session.run("ls /; ls /abc")

}這樣就能在螢幕上顯示正常,異常的資訊了。

互動式命令

上面的方式無法遠端執行互動式命令,比如 top , 遠端編輯乙個檔案,比如vi /etc/nginx/nginx.conf如果要支援互動式的命令,需要當前的terminal來接管遠端的 pty。

func main()

defer session.close()

fd := int(os.stdin.fd())

oldstate, err := terminal.makeraw(fd)

if err != nil

defer terminal.restore(fd, oldstate)

// excute command

session.stdout = os.stdout

session.stderr = os.stderr

session.stdin = os.stdin

termwidth, termheight, err := terminal.g程式設計客棧etsize(fd)

if err != nil

// set up terminal modes

modes := ssh.terminalmodes

// request pseudo terminal

if err := session.requestpty("xterm-256color", termheight, termwidth, modes); err != nil

session.run("top")}總結

好了,這樣就可以執行互動式命令了,比如上面的 top 也可以通過vi /etc/nginx/nignx.conf之類的命令來遠端編輯檔案。以上就是如何使用go語言實現遠端執行命令的全部內容了,希望本文對大家學習python有所幫助。

本文標題: 如何使用go語言實現遠端執行命令

本文位址:

Go語言實現Valid Parentheses

write a function called that takes a string of parentheses,and determines if the order of the parentheses is valid.the function should return true if ...

RPC遠端呼叫,go語言實現RPC小Demo

它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。採用客戶機 伺服器模式。請求程式是乙個客戶機 而服務服務提供程式就是乙個伺服器。過程 1.呼叫客戶端控制代碼 執行傳送引數。2.呼叫本地系統核心傳送網路訊息。3.訊息傳送到遠端主機。4.伺服器控制代碼得到訊息並取得引數。5.執...

go語言實現鍊錶

宣告結構體 宣告全域性變數,儲存頭結點 var head node var curr node 宣告節點型別 type node struct 建立頭結點 func createheadnode data string node 新增新節點 func addnode data string node...