ホームページ  >  記事  >  バックエンド開発  >  Golang CLI で SSH を使用してリモート コマンドを実行するにはどうすればよいですか?

Golang CLI で SSH を使用してリモート コマンドを実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 08:12:03935ブラウズ

How to Execute Remote Commands with SSH in a Golang CLI?

Golang CLI で SSH を使用してリモート コマンドを実行する

リモート マシンでのコマンドの実行は、システム管理を自動化する場合の一般的なタスクです。 Golang の「golang.org/x/crypto/ssh」パッケージは、SSH 接続を確立し、コマンドをリモートで実行するための便利な方法を提供します。

リモート マシンでコマンドを実行するには、次の手順に従います。

  1. SSH 接続を確立します:
    ssh.Dial 関数を使用しますリモート マシンへの SSH 接続を確立します。次の情報を指定する必要があります:

    • ユーザー名
    • IP アドレスまたはホスト名
    • ポート (デフォルトは 22)
    • 認証資格情報 (キーまたはパスワード)
  2. SSH セッションの作成:
    接続が確立されたら、NewSession 関数を使用して新しいセッションを作成します。セッションは、特定のコマンドへの接続を表します。
  3. 入力と出力の構成:
    セッションの標準の入力ストリームと出力ストリームを構成できます。たとえば、出力を bytes.Buffer にリダイレクトして、コマンドの結果をキャプチャできます。
  4. コマンドの実行:
    session.Run 関数を使用して、目的のコマンドを実行します。リモートマシン。この関数は、コマンドが完了するまでブロックされます。

リモート コマンドを実行してその出力を返す方法を示す関数の例を次に示します。

import (
    "bytes"
    "net"

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

func remoteRun(user, addr, privateKey, cmd string) (string, error) {
    key, err := ssh.ParsePrivateKey([]byte(privateKey))
    if err != nil {
        return "", err
    }

    config := &ssh.ClientConfig{
        User: user,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Auth: []ssh.AuthMethod{
            ssh.PublicKeys(key),
        },
    }

    client, err := ssh.Dial("tcp", net.JoinHostPort(addr, "22"), config)
    if err != nil {
        return "", err
    }

    session, err := client.NewSession()
    if err != nil {
        return "", err
    }
    defer session.Close()

    var b bytes.Buffer  // capture output
    session.Stdout = &b // get output

    err = session.Run(cmd)
    return b.String(), err
}

この関数は次の目的で使用できます。リモート マシン上でコマンドを実行し、Golang CLI スクリプトからシステム管理タスクを自動化する便利な方法を提供します。

以上がGolang CLI で SSH を使用してリモート コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。