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 ക്ലയന്റ് അടയ്ക്കുക. പ്രൊഡക്ഷനിലെ കണക്ഷൻ കൈകാര്യം ചെയ്യലിന് പരിമിതമായ ഡയലിംഗ് നയവും ഹാൻഡ്ഷേക്ക് നയവും വേണം; ഈ സഹായ ഫംഗ്ഷൻ ഗതാഗത കൈമാറ്റം മാത്രം വിശദീകരിക്കുന്നു.