前言
遠端執行命令有什麼用?為什麼要遠端執行命令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...