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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-08 10:53:02901ブラウズ

How to Execute Commands on Remote Machines Using Go CLI?

Go CLI でのリモート コマンドの実行

概要

このガイドでは、Go CLI でコマンドを実行するために必要な手順を説明します。 Go CLI を使用するリモート マシン。 SSH 経由での接続、キーを使用した認証、シングルホップ接続の処理方法を学び、要塞マシンとターゲット マシンの両方でコマンドを実行できるようにします。

リモート実行に SSH を使用する

最初のステップでは、「golang.org/x/crypto/ssh」パッケージを利用して SSH 接続を確立します。このパッケージは、安全なリモート コマンド実行に必要な機能を提供します。

使用例

どのように動作するかを示すために、単一のコマンドを実行する、remoteRun という関数を作成してみましょう。リモートマシンを呼び出して、出力:

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
    session.Stdout = &b
    err = session.Run(cmd)
    return b.String(), err
}

使用法

remoteRun 関数を使用するには、次のパラメータを渡すことができます:

  • user: ユーザー名リモートマシンの場合
  • addr: リモートマシンのアドレスmachine
  • privateKey: SSH 認証用の秘密キー
  • cmd: 実行するコマンド

シングルホップ接続

要塞マシン経由でターゲット マシンに接続する必要がある場合は、remoteRun 関数を使用できます。ネストされたファッション:

bastionOutput, err := remoteRun("user", "bastion-addr", "key", "ssh user@target-addr -p 22")
if err != nil {
    // Handle error
}
targetOutput, err := remoteRun("user", "target-addr", "key", "command-on-target")
if err != nil {
    // Handle error
}

この例では、bastionOutput 変数には、ターゲット マシンに接続する SSH コマンドからの出力が含まれています。そこから、targetOutput 変数には、ターゲット マシンで実行されたコマンドの出力が含まれます。

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

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