Предајте му на 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 клиент кога неговата работа ќе заврши. Ракувањето со врски во продукција бара и ограничено поврзување и политика за ракување; оваа помошна функција само го илустрира предавањето на транспортот.