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 প্যাকেজ বিশ্বস্ত known_hosts ফাইল থেকে ওই callback তৈরি করতে পারে। গন্তব্য হোস্টনেম NewClientConn-এ পাঠান যাতে হোস্ট-কী মিলানো উদ্দিষ্ট SSH পরিচয় ব্যবহার করে।

nil আর্গুমেন্ট কোনো SOCKS ক্রেডেনশিয়াল বাছে না। অনুমোদিত পাবলিক SSH গন্তব্যের জন্য SOCKS5 প্রক্সি তালিকার একটি অ্যাকাউন্টহীন এন্ট্রি proxyAddr দিতে পারে, যদি তা প্রকৃত SSH হোস্ট ও পোর্ট অনুমোদন করে। প্রয়োজনে প্রক্সি অ্যাকাউন্টসহ proxy.Auth পাঠান; SSH প্রমাণীকরণ config-এই থাকে।

NewClient NewClientConn থেকে পাওয়া ইনকামিং চ্যানেল ও রিকোয়েস্ট স্ট্রিম গ্রহণ করে ওই ক্লায়েন্ট যন্ত্র চালায়। কাজ শেষ হলে ফেরত পাওয়া SSH ক্লায়েন্ট বন্ধ করুন। উৎপাদনে সংযোগ পরিচালনার জন্য সীমিত ডায়ালিং ও হ্যান্ডশেক নীতি দরকার; এই সহায়ক কেবল পরিবহন হস্তান্তর দেখায়।

সম্পর্কিত নিবন্ধ