ホームページ  >  記事  >  バックエンド開発  >  Go で PEM/キーを使用して SSH を認証するにはどうすればよいですか?

Go で PEM/キーを使用して SSH を認証するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 01:47:01497ブラウズ

How to Authenticate to SSH with a PEM/Key in Go?

Go の pem/キーを使用した SSH への認証

秘密キーを使用してリモート SSH サーバーに接続するのは便利な方法です。タスクを自動化し、リソースを管理します。 Go プログラミング言語は、SSH 接続の確立をサポートする ssh パッケージを提供します。ただし、秘密キーを使用して認証する方法については、ドキュメントがやや不明確な場合があります。

pem キーを使用して SSH を使用してサーバーに接続するには、次の手順に従います。

  1. 署名者の取得: 秘密鍵から ssh.Signer を取得する必要があります。これは、特定のキー タイプ (rsa、dsa、ecdsa など) に対して ssh.ParsePrivateKey 関数または ssh.NewSignerFromKey 関数を使用して実行できます。
  2. AuthMethod を作成します: Signer オブジェクトを変換します。 ssh.PublicKeys 関数を使用して ssh.AuthMethod に変換します。これにより、署名者がラップされ、SSH 接続中の認証に使用できるようになります。
  3. Configure ClientConfig: 認証方法、ユーザー名、その他の情報を含む ssh.ClientConfig オブジェクトを設定します。必要な設定パラメータ。
  4. 接続をダイヤルします: ssh.Dial 関数を使用します。 ClientConfig を使用してリモート サーバーへの接続を確立します。
  5. セッションの作成: 接続が確立されたら、リモート サーバーでコマンドを実行するための ssh.Session を作成します。

例:

<code class="go">package main

import (
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "log"
    "net"
    "os"

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

func main() {
    // Parse the private key
    key, err := ioutil.ReadFile("mykey.pem")
    if err != nil {
        log.Fatal(err)
    }

    // Get the signer
    signer, err := ssh.ParsePrivateKey(key)
    if err != nil {
        log.Fatal(err)
    }

    // Switch to using an agent if SSH_AUTH_SOCK is set
    if authSock := os.Getenv("SSH_AUTH_SOCK"); authSock != "" {
        sock, err := net.Dial("unix", authSock)
        if err != nil {
            log.Fatalf("Failed to connect to agent: %v", err)
        }
        _ = sock
        // TODO(harsh)
        // Implement working with agent.
    }

    // Create the AuthMethod
    authMethods := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    // Set up the ClientConfig
    clientConfig := &ssh.ClientConfig{
        User:            "username",
        Auth:            authMethods,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    // Dial the connection
    client, err := ssh.Dial("tcp", "aws-hostname:22", clientConfig)
    if err != nil {
        log.Fatal(err)
    }

    // Create a session
    session, err := client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    // Execute a command
    output, err := session.Output("whoami")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Output:", string(output))

    // Close the session and client
    _ = session.Close()
    _ = client.Close()
}</code>

これらの手順に従うと、秘密キーを使用して安全な SSH 接続を確立し、Go 標準ライブラリの ssh パッケージを使用してリモート サーバー上でコマンドを実行できます。

以上がGo で PEM/キーを使用して SSH を認証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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