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 පැකේජයට විශ්වාසදායක known_hosts ගොනුවකින් එම callback ගොඩනැගිය හැක. ගමනාන්ත සත්කාරක නාමය NewClientConn වෙත යවන්න, එවිට සත්කාරක යතුරු ගැලපීම අපේක්ෂිත SSH අනන්‍යතාව භාවිත කරයි.

nil තර්කය කිසිදු SOCKS අක්තපත්‍රයක් තෝරා නොගනී. අනුමත පොදු SSH ගමනාන්ත සඳහා SOCKS5 ප්‍රොක්සි ලැයිස්තුවේ ගිණුමක් නොමැති සටහනකට proxyAddr සැපයිය හැක, එය සැබෑ SSH සත්කාරකය සහ තොටුපොළට ඉඩ දෙන්නේ නම්. අවශ්‍ය විට ප්‍රොක්සි ගිණුම සහිත proxy.Auth යවන්න; SSH සත්‍යාපනය config තුළම රැඳේ.

NewClient, NewClientConn ආපසු දෙන එන නාලිකා සහ ඉල්ලීම් ප්‍රවාහ ලබාගෙන එම සේවාදායක යාන්ත්‍රණය මෙහෙයවයි. වැඩ අවසන් වූ විට ආපසු දුන් SSH සේවාදායකයා වසන්න. නිෂ්පාදනයේ සම්බන්ධතා හැසිරවීමට සීමිත dial ප්‍රතිපත්තියක් සහ අත් සම්බන්ධ ප්‍රතිපත්තියක්ද අවශ්‍යයි; මෙම සහායක ශ්‍රිතය ප්‍රවාහනය භාරදීම පමණක් නිරූපණය කරයි.

අදාළ ලිපි