ມອບການເຊື່ອມຕໍ່ທີ່ SOCKS ເປີດໃຫ້ລູກຄ້າ SSH ຂອງ Go
Dial ປາຍທາງ SSH ດ້ວຍ x/net/proxy, ແລ້ວເລີ່ມ x/crypto/ssh ເທິງ net.Conn ທີ່ໄດ້.
Dialer SOCKS ສະໜອງການຂົນສົ່ງ; ແພັກເກດ SSH ເຮັດການຈັບມື SSH ເທິງມັນ. ການເອີ້ນ ssh.Dial ຫຼັງຈາກນັ້ນຈະສ້າງການເຊື່ອມຕໍ່ແຍກຕ່າງຫາກ ແທນທີ່ຈະໃຊ້ການຂົນສົ່ງນັ້ນ.
ຟັງຊັນຊ່ວຍໃນແອັບທີ່ໃຊ້ x/net/proxy ແລະ x/crypto/ssh ຢູ່ແລ້ວສາມາດສົ່ງລູກຄ້າ SSH ທີ່ຕັ້ງຄ່າໄວ້ຄືນ:
func dialSSHViaSOCKS(proxyAddr, sshAddr string,
config *ssh.ClientConfig) (*ssh.Client, error) {
dialer, err := proxy.SOCKS5("tcp", proxyAddr, nil, proxy.Direct)
if err != nil {
return nil, err
}
conn, err := dialer.Dial("tcp", sshAddr)
if err != nil {
return nil, err
}
transport, channels, requests, err :=
ssh.NewClientConn(conn, sshAddr, config)
if err != nil {
conn.Close()
return nil, err
}
return ssh.NewClient(transport, channels, requests), nil
}ຊື່ແພັກເກດຢູ່ນີ້ແມ່ນ golang.org/x/net/proxy ແລະ golang.org/x/crypto/ssh. proxyAddr ກຳນົດຕົວຮັບຟັງ SOCKS; sshAddr ກຳນົດເຊີບເວີສຸດທ້າຍເປັນ host:port.
ສະໜອງຜູ້ໃຊ້ SSH ປົກກະຕິຂອງແອັບ, ວິທີການຢືນຢັນ ແລະ HostKeyCallback ໃນ config. ແພັກເກດ knownhosts ສ້າງ callback ນັ້ນຈາກໄຟລ໌ known_hosts ທີ່ໄວ້ໃຈໄດ້. ສົ່ງຊື່ໂຮສປາຍທາງໄປ NewClientConn ເພື່ອໃຫ້ການທຽບກະແຈໂຮສໃຊ້ຕົວຕົນ SSH ທີ່ຕັ້ງໃຈໄວ້.
ອາກູເມັນ nil ບໍ່ເລືອກຂໍ້ມູນ SOCKS ໃດໆ. ສຳລັບປາຍທາງ SSH ສາທາລະນະທີ່ອະນຸຍາດ, ລາຍການທີ່ບໍ່ມີບັນຊີຈາກ ລາຍຊື່ພຣັອກຊີ SOCKS5 ສາມາດໃຫ້ proxyAddr ຖ້າມັນອະນຸຍາດໂຮສ ແລະ ພອດ SSH ຕົວຈິງ. ເມື່ອຈຳເປັນ, ສົ່ງ proxy.Auth ທີ່ມີບັນຊີພຣັອກຊີ; ການຢືນຢັນ SSH ຍັງຢູ່ໃນ config.
NewClient ຮັບກະແສຊ່ອງທາງ ແລະ ຄຳຂໍເຂົ້າມາທີ່ NewClientConn ສົ່ງຄືນ ແລະ ຈັດການກົນໄກລູກຄ້ານັ້ນ. ປິດລູກຄ້າ SSH ທີ່ໄດ້ຄືນເມື່ອວຽກແລ້ວ. ການຈັດການການເຊື່ອມຕໍ່ໃນການຜະລິດຍັງຕ້ອງການ ການ dial ທີ່ຈຳກັດ ແລະ ນະໂຍບາຍການຈັບມື; ຟັງຊັນຊ່ວຍນີ້ພຽງແຕ່ສະແດງການສົ່ງຕໍ່ການຂົນສົ່ງ.