Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mewujudkan Sambungan SSH dengan Kekunci Menggunakan Pakej ssh Go?

Bagaimana untuk Mewujudkan Sambungan SSH dengan Kekunci Menggunakan Pakej ssh Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 12:47:30866semak imbas

How to Establish SSH Connections with Keys Using Go's ssh Package?

Mewujudkan Sambungan SSH dengan Kunci Menggunakan Pakej ssh Go

Menyambung ke pelayan jauh melalui SSH dengan kunci adalah tugas penting dalam pentadbiran sistem dan DevOps. Bahasa pengaturcaraan Go menyediakan pakej ssh untuk mengendalikan sambungan SSH. Walau bagaimanapun, menavigasi dokumentasinya boleh menjadi mencabar.

Timbul persoalan: Bolehkah kita menyambung ke pelayan SSH menggunakan fail kunci atau kunci peribadi dengan pakej Go ssh?

Dokumentasi menyatakan bahawa hanya kaedah pengesahan "kata laluan" disokong pada masa ini. Jangan risau, kerana adalah mungkin untuk mewujudkan sambungan menggunakan fail kunci atau kunci peribadi.

Kunci untuk membuka kunci fungsi ini terletak pada menukar fail kunci kepada ssh.Signer dan kemudian membenamkannya dalam ssh .AuthMethod.PublicKeys. Berikut ialah coretan kod contoh untuk menghuraikan prosesnya:

<code class="go">import (
    "crypto/ecdsa"
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "io/ioutil"
    "log"
    "net"

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

func main() {
    pemBytes, err := ioutil.ReadFile("my_key.pem")
    if err != nil {
        log.Fatal(err)
    }

    block, _ := pem.Decode(pemBytes)
    privKey, err := x509.ParseECPrivateKey(block.Bytes)
    if err != nil {
        log.Fatal(err)
    }

    signer, err := ssh.NewSignerFromKey(privKey)
    if err != nil {
        log.Fatal(err)
    }

    auths := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

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

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

    stdout, err := session.Output("whoami")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(stdout))
}</code>

Kod dipertingkat ini mengendalikan kedua-dua fail utama dan kunci peribadi, memberikan penyelesaian yang lebih komprehensif. Dalam contoh, kunci ecdsa digunakan, tetapi konsep ini digunakan untuk sebarang jenis kunci persendirian.

Kesimpulan:

Pakej Go ssh membenarkan untuk mewujudkan sambungan SSH menggunakan kunci. Maklumlah, dokumentasi mungkin kelihatan rumit. Dengan menggunakan ssh.PublicKeys dan menukar kunci ke dalam format yang sesuai menggunakan ssh.Signer, ia menjadi mungkin untuk menyambung dengan lancar dan melaksanakan tugas sistem yang penting.

Atas ialah kandungan terperinci Bagaimana untuk Mewujudkan Sambungan SSH dengan Kekunci Menggunakan Pakej ssh 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