Go نىڭ SSH كلىنتىغا SOCKS ئاچقان ئۇلىنىشنى بېرىڭ
SSH نىشانىغا x/net/proxy بىلەن ئۇلىنىپ، ئاندىن ھاسىل بولغان net.Conn ئۈستىدە x/crypto/ssh نى قوزغىتىڭ.
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 بوغچىسى بۇ callback نى ئىشەنچلىك known_hosts ھۆججىتىدىن قۇرالايدۇ. نىشان host نامىنى NewClientConn غا يەتكۈزۈڭ، شۇنداق قىلغاندا host ئاچقۇچ ماسلاشتۇرۇشى مەقسەت قىلىنغان SSH كىملىكىنى ئىشلىتىدۇ.
nil ئارگۇمېنتى ھېچقانداق SOCKS ھېسابات ئۇچۇرىنى تاللىمايدۇ. رۇخسەت قىلىنغان ئاممىۋى SSH نىشانلىرى ئۈچۈن SOCKS5 ۋاكالەتچى تىزىملىكى دىكى ھېساباتسىز تۈر، ئەگەر ھەقىقىي SSH host ۋە پورتىغا رۇخسەت قىلسا، proxyAddr بېرەلەيدۇ. زۆرۈر بولغاندا ۋاكالەتچى ھېساباتى بار proxy.Auth نى بېرىڭ؛ SSH دەلىللەش config ئىچىدە قالىدۇ.
NewClient NewClientConn قايتۇرغان كىرگەن كانال ۋە تەلەپ ئېقىملىرىنى قوبۇل قىلىپ، شۇ كلىنت مېخانىزمىنى باشقۇرىدۇ. خىزمەت تاماملانغاندا قايتۇرۇلغان SSH كلىنتىنى تاقاڭ. ئىشلەپچىقىرىشتا ئۇلىنىش بىر تەرەپ قىلىش يەنە چەكلەنگەن dial ۋە قول ئېلىشىش سىياسىتىنى تەلەپ قىلىدۇ؛ بۇ ياردەمچى فۇنكسىيە پەقەت توشۇشنىڭ ئۆتكۈزۈلۈشىنى كۆرسىتىدۇ.