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 ಪ್ಯಾಕೇಜ್ ವಿಶ್ವಾಸಾರ್ಹ known_hosts ಕಡತದಿಂದ ಆ callback ನಿರ್ಮಿಸಬಹುದು. ಗಮ್ಯ ಹೋಸ್ಟ್‌ಹೆಸರನ್ನು NewClientConn ಗೆ ಕಳುಹಿಸಿ, ಇದರಿಂದ ಹೋಸ್ಟ್-ಕೀ ಹೊಂದಾಣಿಕೆ ಉದ್ದೇಶಿತ SSH ಗುರುತನ್ನು ಬಳಸುತ್ತದೆ.

nil ಆರ್ಗ್ಯುಮೆಂಟ್ ಯಾವುದೇ SOCKS ರುಜುವಾತುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದಿಲ್ಲ. ಅನುಮತಿಸಿದ ಸಾರ್ವಜನಿಕ SSH ಗಮ್ಯಗಳಿಗೆ SOCKS5 ಪ್ರಾಕ್ಸಿ ಪಟ್ಟಿಯ ಖಾತೆರಹಿತ ನಮೂದು, ನಿಜವಾದ SSH ಹೋಸ್ಟ್ ಮತ್ತು ಪೋರ್ಟ್ ಅನ್ನು ಅನುಮತಿಸಿದರೆ proxyAddr ಒದಗಿಸಬಹುದು. ಬೇಕಾದರೆ ಪ್ರಾಕ್ಸಿ ಖಾತೆ ಇರುವ proxy.Auth ಕಳುಹಿಸಿ; SSH ದೃಢೀಕರಣ config ನಲ್ಲೇ ಇರುತ್ತದೆ.

NewClient, NewClientConn ಹಿಂತಿರುಗಿಸುವ ಒಳಬರುವ ಚಾನಲ್ ಮತ್ತು ವಿನಂತಿ ಸ್ಟ್ರೀಮ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಿ ಆ ಕ್ಲೈಂಟ್ ಯಂತ್ರವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಕೆಲಸ ಮುಗಿದಾಗ ಹಿಂತಿರುಗಿಸಿದ SSH ಕ್ಲೈಂಟ್ ಮುಚ್ಚಿ. ಉತ್ಪಾದನೆಯಲ್ಲಿ ಸಂಪರ್ಕ ನಿರ್ವಹಣೆಗೆ ಮಿತವಾದ ಡಯಲಿಂಗ್ ಮತ್ತು ಹ್ಯಾಂಡ್‌ಶೇಕ್ ನೀತಿಯೂ ಬೇಕು; ಈ ಸಹಾಯಕ ಫಂಕ್ಷನ್ ಸಾರಿಗೆಯ ಹಸ್ತಾಂತರವನ್ನು ಮಾತ್ರ ತೋರಿಸುತ್ತದೆ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು