Olùpè SOCKS ń pèsè ọ̀nà gbígbé; àpò SSH ń ṣe ìfọwọ́kàn SSH lórí rẹ̀. Pípè ssh.Dial lẹ́yìn náà yóò dá ìsopọ̀ ọ̀tọ̀ọ̀tọ̀ dípò lílo ọ̀nà gbígbé yẹn.

Iṣẹ́ olùrànlọ́wọ́ nínú ohun èlò tí ó ti ń lo x/net/proxy àti x/crypto/ssh lè dá SSH aláṣepọ̀ tí a ti ṣètò padà:

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
}

Àwọn orúkọ àpò níbí ni golang.org/x/net/proxy àti golang.org/x/crypto/ssh. proxyAddr ń fi olùgbọ́ SOCKS hàn; sshAddr ń fi ẹrọ ìsìn ìkẹyìn hàn gẹ́gẹ́ bí host:port.

Pèsè nínú config olùlò SSH déédéé ti ohun èlò náà, àwọn ọ̀nà ìjẹ́rìí àti HostKeyCallback. Àpò knownhosts lè kọ́ callback yẹn láti fáìlì known_hosts tí a gbẹ́kẹ̀lé. Fi orúkọ olùgbàléjò ibi-afẹ́de náà ránṣẹ́ sí NewClientConn kí ìbámu kọ́kọ́rọ́ olùgbàléjò lè lo ìdánimọ̀ SSH tí a ní lọ́kàn.

Àríyànjiyàn nil kò yan ìjẹ́rìí SOCKS kankan. Fún àwọn ibi-afẹ́de SSH gbangba tí a gbà láàyè, àkọsílẹ̀ tí kò ní àkọọ́lẹ̀ láti àkójọ proxy SOCKS5 lè pèsè proxyAddr bí ó bá gba olùgbàléjò àti ibùdó SSH gidi láàyè. Nígbà tí ó bá yẹ, fi proxy.Auth tí ó ní àkọọ́lẹ̀ proxy ránṣẹ́; ìjẹ́rìí SSH ń dúró nínú config.

NewClient ń gba àwọn ìṣàn ikanni àti ìbéèrè tí ń wọlé tí NewClientConn dá padà, ó sì ń bójú tó ẹ̀rọ aláṣepọ̀ yẹn. Pa SSH aláṣepọ̀ tí a dá padà nígbà tí iṣẹ́ rẹ̀ bá parí. Ìtọ́jú ìsopọ̀ nínú ìmújáde tún nílò pípè tí ó ní ààlà àti ìlànà ìfọwọ́kàn; iṣẹ́ olùrànlọ́wọ́ yìí kàn ń ṣàpèjúwe ìfàṣẹ́ ọ̀nà gbígbé.

Àwọn àpilẹ̀kọ tó jọra