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

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

Patricia Arquette
リリース: 2024-11-08 10:53:02
オリジナル
906 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート