真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語(yǔ)言執(zhí)行shell go語(yǔ)言執(zhí)行exe

如何使用Go語(yǔ)言實(shí)現(xiàn)遠(yuǎn)程執(zhí)行命令

一般命令

創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都咖啡廳設(shè)計(jì)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。

所謂一般命令,就是在一定時(shí)間內(nèi)會(huì)執(zhí)行完的命令。比如 grep, cat 等等。 執(zhí)行命令的步驟是:連接,執(zhí)行,獲取結(jié)果

連接

連接包含了認(rèn)證,可以使用 password 或者 sshkey 2種方式來(lái)認(rèn)證。下面的示例為了簡(jiǎn)單,使用了密碼認(rèn)證的方式來(lái)完成連接。

import (

"fmt"

"time"

"golang.org/x/crypto/ssh"

)

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

var (

auth []ssh.AuthMethod

addr string

clientConfig *ssh.ClientConfig

client *ssh.Client

session *ssh.Session

err error

)

// get auth method

auth = make([]ssh.AuthMethod, 0)

auth = append(auth, ssh.Password(password))

clientConfig = ssh.ClientConfig{

User: user,

Auth: auth,

Timeout: 30 * time.Second,

}

// connet to ssh

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

if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

return nil, err

}

// create session

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

return nil, err

}

return session, nil

}

連接的方法很簡(jiǎn)單,只要提供登錄主機(jī)的 用戶*, *密碼*, *主機(jī)名或者IP*, *SSH端口

執(zhí)行,命令獲取結(jié)果

連接成功后,執(zhí)行命令很簡(jiǎn)單

import (

"fmt"

"log"

"os"

"time"

"golang.org/x/crypto/ssh"

)

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

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

}

上面代碼運(yùn)行之后,雖然命令正常執(zhí)行了,但是沒(méi)有正常輸出的結(jié)果,也沒(méi)有異常輸出的結(jié)果。 要想顯示結(jié)果,需要將 session 的 Stdout 和 Stderr 重定向 修改 func main 為如下:

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Stdout = os.Stdout

session.Stderr = os.Stderr

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

}

這樣就能在屏幕上顯示正常,異常的信息了。

交互式命令

上面的方式無(wú)法遠(yuǎn)程執(zhí)行交互式命令,比如 top , 遠(yuǎn)程編輯一個(gè)文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要當(dāng)前的terminal來(lái)接管遠(yuǎn)程的 PTY。

func main() {

session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)

if err != nil {

log.Fatal(err)

}

defer session.Close()

fd := int(os.Stdin.Fd())

oldState, err := terminal.MakeRaw(fd)

if err != nil {

panic(err)

}

defer terminal.Restore(fd, oldState)

// excute command

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Stdin = os.Stdin

termWidth, termHeight, err := terminal.GetSize(fd)

if err != nil {

panic(err)

}

// Set up terminal modes

modes := ssh.TerminalModes{

ssh.ECHO: 1, // enable echoing

ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud

ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud

}

// Request pseudo terminal

if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {

log.Fatal(err)

}

session.Run("top")

}

可以用go語(yǔ)言成功執(zhí)行shutdown命令嗎?怎么做

import?(

"bytes"

"fmt"

"os/exec"

)

func?exec_shell()?(string,?error){

//函數(shù)返回一個(gè)*Cmd,用于使用給出的參數(shù)執(zhí)行name指定的程序

cmd?:=?exec.Command("shutdown",?"-h","now")

//讀取io.Writer類型的cmd.Stdout,再通過(guò)bytes.Buffer(緩沖byte類型的緩沖器)將byte類型轉(zhuǎn)化為string類型(out.String():這是bytes類型提供的接口)

var?out?bytes.Buffer

cmd.Stdout?=?out

//Run執(zhí)行c包含的命令,并阻塞直到完成。??這里stdout被取出,cmd.Wait()無(wú)法正確獲取stdin,stdout,stderr,則阻塞在那了

err?:=?cmd.Run()

return?out.String(),?err

}

func?main(){

if?result,err:=exec_shell();err!=nil{

fmt.Println("error:",err)

}else{

fmt.Println("exec?succ?",?result)

}

}

go語(yǔ)言怎么調(diào)用shell腳本文件

一、Android應(yīng)用啟動(dòng)服務(wù)執(zhí)行腳本1如何寫服務(wù)和腳本在android源碼根目錄下有/device/tegatech/tegav2/init.rc文件相信大家對(duì)這個(gè)文件都不陌生(如果不明白就仔細(xì)研讀下android啟動(dòng)流程)。如果在該腳本文件中添加諸如以下服務(wù):serviceusblp_tes...

如何在shell上運(yùn)行g(shù)olang

Linux 直接用 chmod -x 文件名 將它的屬性修改為可運(yùn)行,然后就可以通過(guò)命令行執(zhí)行它了,后綴名你改為 .sh ,這是 shell 默認(rèn)支持的文件類型


文章名稱:go語(yǔ)言執(zhí)行shell go語(yǔ)言執(zhí)行exe
標(biāo)題鏈接:http://weahome.cn/article/hpdisi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部