Go-гийн SSH клиентэд SOCKS-оор нээсэн холболтыг өг
SSH очих цэг рүү x/net/proxy-оор холбогдоод, дараа нь үүссэн net.Conn дээр x/crypto/ssh-г эхлүүл.
SOCKS dialer нь тээврийг нийлүүлдэг; 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 хэлбэрээр заана.
config дотор аппын ердийн SSH хэрэглэгч, баталгаажуулалтын арга, HostKeyCallback-г өг. knownhosts багц тэр callback-г итгэмжлэгдсэн known_hosts файлаас бүрдүүлж чадна. Очих цэгийн хостны нэрийг NewClientConn-д дамжуул, ингэснээр хост түлхүүрийн харьцуулалт зориудын SSH таних тэмдгийг ашиглана.
nil аргумент нь ямар ч SOCKS итгэмжлэл сонгохгүй. Зөвшөөрөгдсөн нийтийн SSH очих цэгүүдэд SOCKS5 прокси жагсаалтын бүртгэлгүй бичлэг нь бодит SSH хост, портыг зөвшөөрвөл proxyAddr өгч чадна. Шаардлагатай үед прокси бүртгэл бүхий proxy.Auth-г дамжуул; SSH баталгаажуулалт config дотор үлдэнэ.
NewClient нь NewClientConn-оос буцаж ирсэн орж ирэх суваг ба хүсэлтийн урсгалыг хүлээж аваад тэр клиентийн механизмыг удирдана. Ажил дуусахад буцаж ирсэн SSH клиентийг хаа. Үйлдвэрлэлд холболтын боловсруулалт нь хязгаарлагдмал холболт болон гар барилтын бодлого шаарддаг; энэ туслах функц зөвхөн тээврийн шилжүүлгийг харуулна.