Odovzdajte SSH klientovi v Go spojenie otvorené cez SOCKS
Pripojte sa k SSH cieľu pomocou x/net/proxy a potom inicializujte x/crypto/ssh na výslednom net.Conn.
Dialer SOCKS zabezpečuje transport; balík SSH nad ním vykonáva SSH handshake. Volanie ssh.Dial by potom vytvorilo samostatné spojenie namiesto použitia tohto transportu.
Pomocná funkcia v aplikácii, ktorá už používa x/net/proxy a x/crypto/ssh, môže vrátiť nakonfigurovaného SSH klienta:
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
}Názvy balíkov sú tu golang.org/x/net/proxy a golang.org/x/crypto/ssh. proxyAddr určuje SOCKS poslucháča; sshAddr určuje konečný server ako host:port.
V config uveďte obvyklého SSH používateľa aplikácie, metódy overovania a HostKeyCallback. Balík knownhosts môže tento callback zostaviť z dôveryhodného súboru known_hosts. Odovzdajte názov cieľového hostiteľa do NewClientConn, aby porovnanie kľúča hostiteľa použilo zamýšľanú identitu SSH.
Argument nil nevyberá žiadne prihlasovacie údaje SOCKS. Pre povolené verejné SSH ciele môže záznam bez účtu zo zoznamu SOCKS5 proxy poskytnúť proxyAddr, ak povoľuje skutočného hostiteľa a port SSH. Ak treba, odovzdajte proxy.Auth s účtom proxy; overovanie SSH zostáva v config.
NewClient preberá prichádzajúce toky kanálov a požiadaviek vrátené NewClientConn a stará sa o túto klientsku mechaniku. Zatvorte vráteného SSH klienta, keď jeho práca skončí. Spracovanie spojení v produkcii potrebuje aj obmedzené pripájanie a politiku handshake; táto pomocná funkcia len ilustruje odovzdanie transportu.