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) }
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) }
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)
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) }
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!