国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Golang筆記:使用ssh包作為客戶端與SSH服務(wù)器交互

這篇具有很好參考價值的文章主要介紹了Golang筆記:使用ssh包作為客戶端與SSH服務(wù)器交互。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目的

Golang中可以使用 golang.org/x/crypto/ssh 包作為SSH客戶端或者SSH服務(wù)使用。這篇文章將簡單記錄下作為客戶端使用的一些內(nèi)容。

Package ssh implements an SSH client and server.

基礎(chǔ)說明

作為客戶端與SSH服務(wù)器操作上來說主要分為三步:

  • 使用一定的參數(shù)與SSH服務(wù)器建立連接得到 Client 對象;
  • Client 之上建立會話 Session ,設(shè)置會話的輸入輸出等配置;
  • 通過 Session 進(jìn)行單次或是連續(xù)通訊;

使用演示

單次通訊

SessionRun Output CombinedOutput 方法都可用于單次通訊,下面是個簡單的演示:

package main

import (
	"bytes"
	"fmt"
	"log"

	"golang.org/x/crypto/ssh"
)

func main() {
	// 設(shè)置客戶端請求參數(shù)
	// var hostKey ssh.PublicKey
	config := &ssh.ClientConfig{
		User: "root",
		Auth: []ssh.AuthMethod{
			ssh.Password("naisu233"),
		},
		// HostKeyCallback: ssh.FixedHostKey(hostKey),
		HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 忽略主機(jī)密鑰
	}

	// 作為客戶端連接SSH服務(wù)器
	client, err := ssh.Dial("tcp", "192.168.31.142:22", config)
	if err != nil {
		log.Fatal("Failed to dial: ", err)
	}
	defer client.Close()

	// 創(chuàng)建會話
	session, err := client.NewSession()
	if err != nil {
		log.Fatal("Failed to create session: ", err)
	}
	defer session.Close()

	// 設(shè)置會話標(biāo)準(zhǔn)輸出,運(yùn)行命令
	var b bytes.Buffer
	session.Stdout = &b
	if err := session.Run("cat /proc/cpuinfo"); err != nil {
		log.Fatal("Failed to run: " + err.Error())
	}

	fmt.Println(b.String())
}

golang ssh,編程相關(guān),服務(wù)器,ssh,golang,終端,交互

需要注意的是每個 Session 只能進(jìn)行一次通訊,并且上述的幾個方法通訊時會阻塞。另外需要注意的是這幾個方法只會在指令運(yùn)行結(jié)束時才會返回結(jié)果,不適合用在持續(xù)進(jìn)行的命令中(比如 top 命令)。

連續(xù)通訊(遠(yuǎn)程終端)

連續(xù)通訊只要使用 SessionStart Shell 方法,使用這兩者時需要使用 Wait 方法來等待結(jié)束會話。 Shell 方法可以作為遠(yuǎn)程終端使用:

package main

import (
	"log"
	"os"

	"golang.org/x/crypto/ssh"
	"golang.org/x/term"
)

func main() {
	// 設(shè)置客戶端請求參數(shù)
	// var hostKey ssh.PublicKey
	config := &ssh.ClientConfig{
		User: "root",
		Auth: []ssh.AuthMethod{
			ssh.Password("naisu233"),
		},
		// HostKeyCallback: ssh.FixedHostKey(hostKey),
		HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 忽略主機(jī)密鑰
	}

	// 作為客戶端連接SSH服務(wù)器
	conn, err := ssh.Dial("tcp", "192.168.31.142:22", config)
	if err != nil {
		log.Fatal("unable to connect: ", err)
	}
	defer conn.Close()

	// 創(chuàng)建會話
	session, err := conn.NewSession()
	if err != nil {
		log.Fatal("unable to create session: ", err)
	}
	defer session.Close()

	// 設(shè)置會話的標(biāo)準(zhǔn)輸出、錯誤輸出、標(biāo)準(zhǔn)輸入
	session.Stdout = os.Stdout
	session.Stderr = os.Stderr
	session.Stdin = os.Stdin

	// 設(shè)置終端參數(shù)
	modes := ssh.TerminalModes{
		ssh.ECHO:          0,     // disable echoing
		ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
		ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
	}

	termWidth, termHeight, err := term.GetSize(int(os.Stdout.Fd())) // 獲取當(dāng)前標(biāo)準(zhǔn)輸出終端窗口尺寸 // 該操作可能有的平臺上不可用,那么下面手動指定終端尺寸即可
	if err != nil {
		log.Fatal("unable to terminal.GetSize: ", err)
	}

	// 設(shè)置虛擬終端與遠(yuǎn)程會話關(guān)聯(lián)
	if err := session.RequestPty("xterm", termHeight, termWidth, modes); err != nil {
		log.Fatal("request for pseudo terminal failed: ", err)
	}

	// 啟動遠(yuǎn)程Shell
	if err := session.Shell(); err != nil {
		log.Fatal("failed to start shell: ", err)
	}

	// 阻塞直至結(jié)束會話
	if err := session.Wait(); err != nil {
		log.Fatal("exit error: ", err)
	}
}

golang ssh,編程相關(guān),服務(wù)器,ssh,golang,終端,交互

總結(jié)

Golang作為客戶端與SSH服務(wù)器交互還是比較方便的,實(shí)際使用中更多的需要注意阻塞方法以及持續(xù)執(zhí)行的外部程序的處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-696891.html

到了這里,關(guān)于Golang筆記:使用ssh包作為客戶端與SSH服務(wù)器交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SSH客戶端常用工具SecureCRT操作

    SSH客戶端常用工具SecureCRT操作

    目錄 1.1 SecureCRT工具介紹 1.2 SecureCRT工具安裝 1.3配置SecureCRT連接Linux主機(jī) 1.4調(diào)整SecureCRT終端顯示和回滾緩沖區(qū)大小 1.5調(diào)整字體及光標(biāo)顏色 1.6 配置記錄SSH操作日志及輸出 1.7 配置本地機(jī)器上傳和下載目錄 1.8 調(diào)整命令行顏色方案(目錄和注釋) SecureCRT是一款支持SSH(SSH1和SSH2)

    2024年02月02日
    瀏覽(21)
  • <Linux>《OpenSSH 客戶端配置文件ssh_config詳解》

    除非另有說明,對于每個參數(shù),將使用第一個獲得的值。配置文件包含由 Host 規(guī)范分隔的部分,該部分僅應(yīng)用于與規(guī)范中給出的模式之一匹配的主機(jī)。匹配的主機(jī)名通常是命令行中給出的名稱(請參閱 CanonicalizeHostname 選項以了解異常情況)。 由于使用了每個參數(shù)的第一個獲得的

    2024年02月07日
    瀏覽(27)
  • Linux服務(wù)器SSH客戶端斷開后保持程序繼續(xù)運(yùn)行的方法

    Linux服務(wù)器SSH客戶端斷開后保持程序繼續(xù)運(yùn)行的方法

    在申請服務(wù)器連接到桌面后,有些時候需要跑一些運(yùn)行時間很長的程序(深度學(xué)習(xí)的訓(xùn)練程序)。在這期間如果退出斷開連接,即:關(guān)閉桌面的編輯器或網(wǎng)頁端的jupyter界面后Linux系統(tǒng)會自動關(guān)閉所有進(jìn)程,程序也會隨之終止運(yùn)行(被掛起),這是不希望看到的,因此本文將通

    2024年02月05日
    瀏覽(25)
  • Windows系統(tǒng)安裝OpenSSH客戶端,實(shí)現(xiàn)ssh遠(yuǎn)程連接云服務(wù)器

    Windows系統(tǒng)安裝OpenSSH客戶端,實(shí)現(xiàn)ssh遠(yuǎn)程連接云服務(wù)器

    一、打開設(shè)置 - 應(yīng)用 -?添加可選功能,選擇安裝OpenSSH客戶端 二、安裝完之后,驗證 ssh?命令 1、啟動ssh服務(wù)之后,打開 cmd?窗口已支持連接 三、如果 ssh?命令仍然不生效,需要配置 ssh 環(huán)境變量 1、新建 SSH_HOME?環(huán)境變量,C:windowsSystem32OpenSSH 2、把新建的?SSH_HOME?變量加入

    2024年02月15日
    瀏覽(22)
  • 【RabbitMQ】golang客戶端教程5——使用topic交換器

    【RabbitMQ】golang客戶端教程5——使用topic交換器

    發(fā)送到 topic交換器 的消息不能具有隨意的 routing_key ——它必須是單詞列表,以點(diǎn)分隔。這些詞可以是任何東西,但通常它們指定與消息相關(guān)的某些功能。一些有效的 routing_key 示例: “stock.usd.nyse” , “nyse.vmw” , “quick.orange.rabbit” 。 routing_key 中可以包含任意多個單詞,

    2024年02月14日
    瀏覽(24)
  • 【RabbitMQ】golang客戶端教程3——發(fā)布訂閱(使用fanout交換器)

    【RabbitMQ】golang客戶端教程3——發(fā)布訂閱(使用fanout交換器)

    在上一個教程中,我們創(chuàng)建了一個工作隊列。工作隊列背后的假設(shè)是每個任務(wù)只傳遞給一個工人。在這一部分中,我們將做一些完全不同的事情——我們將向多個消費(fèi)者傳遞一個消息。這就是所謂的 “訂閱/發(fā)布模式” 。 為了說明這種模式,我們將構(gòu)建一個簡單的日志系統(tǒng)。

    2024年02月14日
    瀏覽(27)
  • Golang編寫客戶端SDK,并開源發(fā)布包到GitHub,供其他項目import使用

    Golang編寫客戶端SDK,并開源發(fā)布包到GitHub,供其他項目import使用

    如果希望其他項目能夠使用該SDK,可以將該SDK打包為一個Go模塊,并將其發(fā)布到Go模塊倉庫中。這將使其他項目能夠通過Go的模塊依賴機(jī)制來使用該SDK。可以輕松地引用和使用你的代碼。 登錄到你的 GitHub 帳戶。 在 GitHub 主頁點(diǎn)擊右上角的加號(+),然后選擇 “New repository”(

    2024年02月09日
    瀏覽(28)
  • MFC CAsyncSocket類作為客戶端示例

    MFC CAsyncSocket類作為客戶端示例

    之前寫過CAsyncSocket類使用的博客;進(jìn)一步看一下; VS新建一個MFC 對話框工程; 添加一個類,從CAsyncSocket繼承,起個自己的名字; 對話框添加幾個編輯框,按鈕,靜態(tài)控件; 為自己的CxxxAsyncSocket類添加重寫的虛函數(shù),OnConnect、OnReceive、OnSend; 自己的CAsyncSocket類的頭文件, 自

    2024年01月16日
    瀏覽(19)
  • rabbitmq筆記-rabbitmq客戶端開發(fā)使用

    1.創(chuàng)建ConnectionFactory,給定參數(shù)ip地址,端口號,用戶名和密碼等 2.創(chuàng)建ConnectionFactory,使用uri方式實(shí)現(xiàn),創(chuàng)建channel。 注意: Connection可以用來創(chuàng)建多個channel實(shí)例,但channel實(shí)例不能在線程間共享,應(yīng)用程序為每個線程開辟一個channel。多線程間共享channel實(shí)例是非線程安全的。

    2024年02月11日
    瀏覽(40)
  • 【netty】java如何作為websocket客戶端 對服務(wù)端發(fā)起請求

    【netty】java如何作為websocket客戶端 對服務(wù)端發(fā)起請求

    是的 本文介紹java如何作為客戶端 發(fā)起websocket請求 博主不做標(biāo)題黨 不會服務(wù)端客戶端分不清就寫個標(biāo)題 亂寫文章 為什么會使用java作為websocket客戶端? 雖說websocket協(xié)議 本意是web與服務(wù)端之間的通訊協(xié)議,那假設(shè)有一天 我們的供應(yīng)商 或者是甲方大爺 只提供了websocket接口呢?

    2024年02月05日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包