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 файлынан құра алады. Мақсат хост атауын NewClientConn-қа беріңіз, сонда хост кілтін салыстыру көзделген SSH бірегейлігін пайдаланады.
nil аргументі ешбір SOCKS тіркелгі деректерін таңдамайды. Рұқсат етілген жалпыға ашық SSH мақсаттары үшін SOCKS5 прокси тізіміндегі тіркелгісіз жазба нақты SSH хосты мен портына рұқсат етсе, proxyAddr бере алады. Қажет болса, прокси тіркелгісі бар proxy.Auth беріңіз; SSH аутентификациясы config ішінде қалады.
NewClient NewClientConn қайтарған кіріс арна мен сұраныс ағындарын қабылдап, сол клиент механизмін басқарады. Жұмыс біткенде қайтарылған SSH клиентін жабыңыз. Өндірісте қосылымдарды өңдеу үшін шектелген қосылу және қол алысу саясаты да қажет; бұл көмекші функция тек тасымалдың берілуін көрсетеді.