Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengesahkan kepada SSH dengan PEM/Key in Go?

Bagaimana untuk Mengesahkan kepada SSH dengan PEM/Key in Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 01:47:01450semak imbas

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

Mengesah ke SSH dengan pem/Key in Go

Menyambung ke pelayan SSH jauh menggunakan kunci persendirian boleh menjadi cara yang mudah untuk mengautomasikan tugas dan mengurus sumber. Bahasa pengaturcaraan Go menawarkan pakej ssh, yang menyediakan sokongan untuk mewujudkan sambungan SSH. Walau bagaimanapun, dokumentasi mungkin agak tidak jelas mengenai cara untuk mengesahkan dengan kunci persendirian.

Untuk menyambung ke pelayan menggunakan SSH dengan kunci pem, anda boleh mengikuti langkah berikut:

  1. Dapatkan Penandatangan: Anda perlu mendapatkan ssh.Penandatangan daripada kunci peribadi anda. Ini boleh dilakukan menggunakan fungsi ssh.ParsePrivateKey atau fungsi ssh.NewSignerFromKey untuk jenis kunci tertentu (cth., rsa, dsa, ecdsa).
  2. Buat AuthMethod: Tukar objek Signer ke dalam ssh.AuthMethod menggunakan fungsi ssh.PublicKeys. Ini membalut Penandatangan dan membenarkannya digunakan untuk pengesahan semasa sambungan SSH.
  3. Konfigurasikan ClientConfig: Sediakan objek ssh.ClientConfig yang merangkumi kaedah pengesahan, nama pengguna dan mana-mana yang lain parameter konfigurasi yang diperlukan.
  4. Dail Sambungan: Gunakan fungsi ssh.Dail untuk mewujudkan sambungan ke pelayan jauh menggunakan ClientConfig anda.
  5. Buat Sesi : Setelah sambungan diwujudkan, cipta ssh.Session untuk melaksanakan arahan pada pelayan jauh.

Contoh:

<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>

Oleh mengikut langkah ini, anda boleh mewujudkan sambungan SSH selamat menggunakan kunci peribadi dan melaksanakan arahan pada pelayan jauh menggunakan pakej ssh perpustakaan standard Go.

Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan kepada SSH dengan PEM/Key in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn