Bộ quay số SOCKS cung cấp phương tiện truyền; gói SSH thực hiện bắt tay SSH trên đó. Gọi ssh.Dial sau đó sẽ tạo một kết nối riêng thay vì dùng phương tiện truyền ấy.

Một hàm phụ trợ trong ứng dụng đã dùng x/net/proxy và x/crypto/ssh có thể trả về client SSH đã cấu hình:

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
}

Tên gói ở đây là golang.org/x/net/proxy và golang.org/x/crypto/ssh. proxyAddr xác định bộ lắng nghe SOCKS; sshAddr xác định máy chủ cuối cùng dưới dạng host:port.

Cung cấp trong config người dùng SSH thông thường của ứng dụng, các phương thức xác thực và HostKeyCallback. knownhosts có thể dựng callback đó từ tệp known_hosts đáng tin cậy. Truyền tên máy chủ đích vào NewClientConn để việc đối chiếu khóa máy chủ dùng đúng danh tính SSH dự kiến.

Đối số nil không chọn thông tin đăng nhập SOCKS nào. Với các đích SSH công khai được phép, một mục không cần tài khoản trong danh sách proxy SOCKS5 có thể cung cấp proxyAddr nếu nó cho phép đúng máy chủ và cổng SSH thực tế. Khi cần, truyền proxy.Auth chứa tài khoản proxy; xác thực SSH vẫn nằm trong config.

NewClient nhận các luồng kênh và yêu cầu đến do NewClientConn trả về và xử lý cơ chế client đó. Đóng client SSH được trả về khi công việc kết thúc. Việc xử lý kết nối trong môi trường thật cũng cần quay số có giới hạn và chính sách bắt tay; hàm phụ trợ này chỉ minh họa việc bàn giao phương tiện truyền.

Bài viết liên quan