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 кардарын жап. Өндүрүштө туташууларды иштетүү чектелген туташуу жана кол алышуу саясатын да талап кылат; бул жардамчы функция транспорттун өткөрүлүшүн гана көрсөтөт.

Тектеш макалалар