SOCKS ने उघडलेले कनेक्शन Go च्या SSH क्लायंटला द्या
x/net/proxy ने SSH गंतव्याशी डायल करा, नंतर मिळालेल्या net.Conn वर x/crypto/ssh सुरू करा.
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 क्लायंट बंद करा. उत्पादनातील कनेक्शन हाताळणीसाठी मर्यादित डायलिंग आणि हँडशेक धोरणही आवश्यक आहे; हे सहाय्यक फंक्शन फक्त वाहतुकीचे हस्तांतरण दाखवते.