Δώστε στον SSH client της Go τη σύνδεση που άνοιξε το SOCKS
Καλέστε τον προορισμό SSH με το x/net/proxy και μετά αρχικοποιήστε το x/crypto/ssh στο net.Conn που προκύπτει.
Ο dialer του SOCKS παρέχει το μεταφορικό μέσο· το πακέτο SSH εκτελεί τη χειραψία SSH πάνω του. Μια κλήση ssh.Dial μετά θα δημιουργούσε ξεχωριστή σύνδεση αντί να χρησιμοποιήσει αυτό το μεταφορικό μέσο.
Μια βοηθητική συνάρτηση σε εφαρμογή που ήδη χρησιμοποιεί x/net/proxy και x/crypto/ssh μπορεί να επιστρέψει τον ρυθμισμένο SSH client:
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. Περάστε το hostname προορισμού στο NewClientConn ώστε η αντιστοίχιση κλειδιού host να χρησιμοποιεί την επιδιωκόμενη ταυτότητα SSH.
Το όρισμα nil δεν επιλέγει διαπιστευτήρια SOCKS. Για επιτρεπόμενους δημόσιους προορισμούς SSH, μια καταχώριση χωρίς λογαριασμό από τη λίστα διακομιστών μεσολάβησης SOCKS5 μπορεί να δώσει proxyAddr αν επιτρέπει τον πραγματικό host και θύρα SSH. Όταν χρειάζεται, περάστε ένα proxy.Auth με τον λογαριασμό του μεσολαβητή· η ταυτοποίηση SSH παραμένει στο config.
Το NewClient δέχεται τις εισερχόμενες ροές καναλιών και αιτημάτων που επιστρέφει το NewClientConn και χειρίζεται αυτόν τον μηχανισμό του client. Κλείστε τον SSH client που επιστρέφεται όταν τελειώσει η εργασία του. Η διαχείριση συνδέσεων σε παραγωγή χρειάζεται επίσης φραγμένη κλήση και πολιτική χειραψίας· αυτή η βοηθητική συνάρτηση απλώς δείχνει την παράδοση του μεταφορικού μέσου.