Предајте Go SSH клијенту везу коју је отворио SOCKS
Повежите се на SSH одредиште помоћу x/net/proxy, затим иницијализујте x/crypto/ssh на добијеном net.Conn.
SOCKS диалер обезбеђује транспорт; 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 проксија може дати proxyAddr ако дозвољава стварни SSH хост и порт. Када је потребно, проследите proxy.Auth са налогом проксија; SSH аутентификација остаје у config.
NewClient прима долазне токове канала и захтева које враћа NewClientConn и управља том клијентском механиком. Затворите враћени SSH клијент када његов посао заврши. Руковање везама у продукцији такође захтева ограничено бирање и политику руковања; ова помоћна функција само илуструје предају транспорта.