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

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