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 ທີ່ຈຳກັດ ແລະ ນະໂຍບາຍການຈັບມື; ຟັງຊັນຊ່ວຍນີ້ພຽງແຕ່ສະແດງການສົ່ງຕໍ່ການຂົນສົ່ງ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ