Go SSH mijoziga SOCKS ochgan ulanishni bering
SSH manziliga x/net/proxy bilan ulanib, so'ngra olingan net.Conn ustida x/crypto/ssh ni ishga tushiring.
SOCKS dialer transportni ta'minlaydi; SSH paketi uning ustida SSH qo'l berishini bajaradi. Keyin ssh.Dial chaqirish o'sha transportdan foydalanish o'rniga alohida ulanish yaratadi.
x/net/proxy va x/crypto/ssh dan foydalanayotgan ilovadagi yordamchi funksiya sozlangan SSH mijozini qaytarishi mumkin:
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
}Bu yerdagi paket nomlari golang.org/x/net/proxy va golang.org/x/crypto/ssh. proxyAddr SOCKS tinglovchisini, sshAddr yakuniy serverni host:port sifatida belgilaydi.
config ichida ilovaning odatiy SSH foydalanuvchisini, autentifikatsiya usullarini va HostKeyCallback ni bering. knownhosts paketi bu callback ni ishonchli known_hosts faylidan qura oladi. Manzil host nomini NewClientConn ga uzating, shunda host kalitini solishtirish ko'zda tutilgan SSH identifikatoridan foydalanadi.
nil argumenti hech qanday SOCKS hisob ma'lumotlarini tanlamaydi. Ruxsat etilgan ommaviy SSH manzillari uchun SOCKS5 proksi ro'yxatidagi hisobsiz yozuv, agar haqiqiy SSH host va portiga ruxsat bersa, proxyAddr bera oladi. Zarur bo'lsa, proksi hisobi bo'lgan proxy.Auth ni uzating; SSH autentifikatsiyasi config ichida qoladi.
NewClient NewClientConn qaytargan kiruvchi kanal va so'rov oqimlarini qabul qilib, o'sha mijoz mexanizmini boshqaradi. Ish tugagach qaytarilgan SSH mijozini yoping. Ishlab chiqarishda ulanish bilan ishlash ham cheklangan dial va qo'l berish siyosatini talab qiladi; bu yordamchi funksiya faqat transportning topshirilishini ko'rsatadi.