ប្រគល់ការតភ្ជាប់ដែល SOCKS បើកឲ្យអតិថិជន SSH របស់ Go
Dial គោលដៅ SSH ដោយ x/net/proxy បន្ទាប់មកចាប់ផ្ដើម x/crypto/ssh លើ net.Conn ដែលទទួលបាន។
ឌីយ៉ាឡ័រ 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 អាចសាងសង់ callback នោះពីឯកសារ known_hosts ដែលអាចទុកចិត្ត។ ផ្ញើឈ្មោះម៉ាស៊ីនគោលដៅទៅ NewClientConn ដើម្បីឲ្យការផ្គូផ្គងកូនសោម៉ាស៊ីនប្រើអត្តសញ្ញាណ SSH ដែលបានបម្រុង។
អាគុយម៉ង់ nil មិនជ្រើសព័ត៌មានសម្ងាត់ SOCKS ទេ។ សម្រាប់គោលដៅ SSH សាធារណៈដែលអនុញ្ញាត ធាតុគ្មានគណនីពី បញ្ជីប្រូកស៊ី SOCKS5 អាចផ្ដល់ proxyAddr ប្រសិនបើវាអនុញ្ញាតម៉ាស៊ីន និងច្រក SSH ពិតប្រាកដ។ ពេលចាំបាច់ ផ្ញើ proxy.Auth ដែលមានគណនីប្រូកស៊ី; ការផ្ទៀងផ្ទាត់ SSH នៅតែក្នុង config។
NewClient ទទួលស្ទ្រីមឆានែល និងសំណើចូលដែល NewClientConn ត្រឡប់មកវិញ ហើយគ្រប់គ្រងយន្តការអតិថិជននោះ។ បិទអតិថិជន SSH ដែលត្រឡប់មកវិញពេលការងារបញ្ចប់។ ការគ្រប់គ្រងការតភ្ជាប់ក្នុងផលិតកម្មក៏ត្រូវការ ការភ្ជាប់ដែលមានកំណត់ និងគោលការណ៍ចាប់ដៃ; អនុគមន៍ជំនួយនេះគ្រាន់តែបង្ហាញការប្រគល់ការដឹកជញ្ជូន។