Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk SSH menjadi Instance Peribadi melalui Hos Bastion Menggunakan x/crypto/ssh Go?

Bagaimana untuk SSH menjadi Instance Peribadi melalui Hos Bastion Menggunakan x/crypto/ssh Go?

Linda Hamilton
Lepaskan: 2024-12-05 02:18:10
asal
466 orang telah melayarinya

How to SSH into a Private Instance via a Bastion Host Using Go's x/crypto/ssh?

Tetapkan Sambungan SSH ke Instance Peribadi melalui Bastion Node menggunakan Go x/crypto/ssh

Ikhtisar:

Panduan ini menunjukkan cara untuk mewujudkan sambungan SSH kepada contoh peribadi melalui nod benteng menggunakan Pustaka x/crypto/ssh Go.

Senario:

Pertimbangkan VPC AWS dengan subnet awam dan peribadi. Contoh "bastion" digunakan dalam subnet awam, manakala "contoh perkhidmatan" berjalan dalam subnet peribadi.

Objektif:

Sambung ke "contoh perkhidmatan" " daripada komputer riba tempatan di atas "benteng", jalankan arahan dan muat naik fail.

Penyelesaian:

1. Mewujudkan Sambungan Bastion:

Gunakan fungsi ssh.Dail untuk menyambung ke hos benteng:

bClient, err := ssh.Dial("tcp", bastionAddr, config)
if err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

2. Mendail Sambungan Perkhidmatan:

Gunakan kaedah Dail klien benteng untuk mewujudkan sambungan kepada hos perkhidmatan:

conn, err := bClient.Dial("tcp", serviceAddr)
if err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

3. Mencipta Klien Perkhidmatan:

Buat ssh.ClientConn dan ssh.Client baharu menggunakan sambungan yang telah ditetapkan:

ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config)
if err != nil {
    log.Fatal(err)
}

sClient := ssh.NewClient(ncc, chans, reqs)
Salin selepas log masuk

4. Menggunakan Klien Perkhidmatan:

SClient yang dibuat kini boleh digunakan untuk melaksanakan arahan dan memindahkan fail:

// Run a command on the service instance
cmd := sClient.Run("ls -l")
output, err := cmd.Output()
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Output: %s", output)

// Upload a file to the service instance
f, err := os.Open("./local_file.txt")
if err != nil {
    log.Fatal(err)
}
defer f.Close()

w, err := sClient.NewWriter("service_file.txt")
if err != nil {
    log.Fatal(err)
}
defer w.Close()

if _, err := io.Copy(w, f); err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk SSH menjadi Instance Peribadi melalui Hos Bastion Menggunakan x/crypto/ssh Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan