SOCKS ਵੱਲੋਂ ਖੋਲ੍ਹਿਆ ਕਨੈਕਸ਼ਨ Go ਦੇ SSH ਕਲਾਇੰਟ ਨੂੰ ਦਿਓ
x/net/proxy ਨਾਲ SSH ਮੰਜ਼ਿਲ ਤੱਕ ਡਾਇਲ ਕਰੋ, ਫਿਰ ਨਤੀਜੇ ਵਜੋਂ ਮਿਲੇ net.Conn ਉੱਤੇ x/crypto/ssh ਸ਼ੁਰੂ ਕਰੋ।
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 ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਦੀ ਬਿਨਾਂ-ਖਾਤਾ ਐਂਟਰੀ proxyAddr ਦੇ ਸਕਦੀ ਹੈ, ਜੇ ਇਹ ਅਸਲ SSH ਹੋਸਟ ਅਤੇ ਪੋਰਟ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਲੋੜ ਪੈਣ ’ਤੇ ਪ੍ਰੌਕਸੀ ਖਾਤੇ ਵਾਲਾ proxy.Auth ਦਿਓ; SSH ਪ੍ਰਮਾਣਿਕਤਾ config ਵਿੱਚ ਹੀ ਰਹਿੰਦੀ ਹੈ।
NewClient NewClientConn ਵਾਪਸ ਦਿੰਦਾ ਆ ਰਹੀ ਚੈਨਲ ਅਤੇ ਬੇਨਤੀ ਸਟ੍ਰੀਮ ਲੈ ਕੇ ਉਹ ਕਲਾਇੰਟ ਮਸ਼ੀਨਰੀ ਸੰਭਾਲਦਾ ਹੈ। ਕੰਮ ਮੁੱਕਣ ’ਤੇ ਵਾਪਸ ਮਿਲਿਆ SSH ਕਲਾਇੰਟ ਬੰਦ ਕਰੋ। ਉਤਪਾਦਨ ਵਿੱਚ ਕਨੈਕਸ਼ਨ ਸੰਭਾਲ ਲਈ ਸੀਮਿਤ ਡਾਇਲਿੰਗ ਅਤੇ ਹੈਂਡਸ਼ੇਕ ਨੀਤੀ ਵੀ ਚਾਹੀਦੀ ਹੈ; ਇਹ ਸਹਾਇਕ ਫੰਕਸ਼ਨ ਸਿਰਫ਼ ਟ੍ਰਾਂਸਪੋਰਟ ਦਾ ਹਸਤਾਂਤਰਣ ਦਿਖਾਉਂਦਾ ਹੈ।