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 କ୍ଲାଏଣ୍ଟ ବନ୍ଦ କରନ୍ତୁ। ଉତ୍ପାଦନରେ ସଂଯୋଗ ପରିଚାଳନା ପାଇଁ ସୀମିତ ଡାଏଲିଂ ଓ ହ୍ୟାଣ୍ଡସେକ ନୀତି ମଧ୍ୟ ଆବଶ୍ୟକ; ଏହି ସହାୟକ ଫଙ୍କସନ କେବଳ ପରିବହନର ହସ୍ତାନ୍ତର ଦେଖାଏ।

ସମ୍ପର୍କିତ ପ୍ରବନ୍ଧ