Fi okun ti SOCKS ṣí fún SSH aláṣepọ̀ Go
Pe ibi-afẹ́de SSH pẹ̀lú x/net/proxy, lẹ́yìn náà bẹ̀rẹ̀ x/crypto/ssh lórí net.Conn tí ó jáde.
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é.