የ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 ይለያል።

በconfig ውስጥ የመተግበሪያውን የተለመደ የSSH ተጠቃሚ፣ የማረጋገጫ ዘዴዎችን እና HostKeyCallback ያቅርቡ። knownhosts ጥቅል ያንን callback ከታመነ known_hosts ፋይል መገንባት ይችላል። የመዳረሻውን አስተናጋጅ ስም ወደ NewClientConn ያስተላልፉ ስለዚህ የአስተናጋጅ ቁልፍ ማዛመጃው የታሰበውን የSSH ማንነት ይጠቀማል።

nil ክርክሩ ምንም የSOCKS ምስክርነት አይመርጥም። ለተፈቀዱ የህዝብ SSH መዳረሻዎች የSOCKS5 ፕሮክሲ ዝርዝር ውስጥ አካውንት የሌለው ግቤት ትክክለኛውን የSSH አስተናጋጅና ወደብ የሚፈቅድ ከሆነ proxyAddr ማቅረብ ይችላል። ሲያስፈልግ የፕሮክሲውን አካውንት የያዘ proxy.Auth ያስተላልፉ፤ የSSH ማረጋገጫ በconfig ውስጥ ይቆያል።

NewClient በNewClientConn የሚመለሱትን ገቢ ቻናልና ጥያቄ ፍሰቶች ተቀብሎ ያንን የደንበኛ ማሽን ያስተዳድራል። ስራው ሲያልቅ የመለሰውን የSSH ደንበኛ ይዝጉ። በምርት ውስጥ የግንኙነት አያያዝ የተገደበ መደወል እና የእጅ መጨበጫ መመሪያም ይፈልጋል፤ ይህ አጋዥ የመጓጓዣውን ሽግግር ብቻ ያሳያል።

ተዛማጅ ጽሑፎች