【问题标题】:SSH connection through C++ libssh refuses to connect通过 C++ libssh 的 SSH 连接拒绝连接
【发布时间】:2021-02-21 03:09:44
【问题描述】:

我正在尝试使用 C++ 中的 libssh 库在客户端和服务器之间创建简化的 SSH 连接。我的代码如下所示:

        ssh_session session;
        session = ssh_new();
        if(session == NULL) {
                cout << "Session cannot be created. Exiting.." << endl;
                exit(EXIT_FAILURE);
        }
        int verbosity = SSH_LOG_FUNCTIONS;
        
        ssh_options_set(session, SSH_OPTIONS_HOST, "127.0.0.1");
        ssh_options_set(session, SSH_OPTIONS_PORT, "22");
        ssh_options_set(session, SSH_OPTIONS_USER, "box")
        ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
        
        int rc;
        // ---- This is where it starts
        rc = ssh_connect(session); // <--- CONNECTION IS CREATED, but THEN IT IS REFUSED BY SERVER!
        if(rc != SSH_OK) {  
                cout << "rc != SSH_OK" << endl; // <--- GETS PRINTED AFTER REFUSAL OF CONNECTION
                exit(EXIT_FAILURE);  // <--- CODE EXITS HERE!
        }
        enum ssh_known_hosts_e state;
        unsigned char *hash = NULL;
        ssh_key srvpubkey = NULL;
        size_t hashlen;
        rc = ssh_get_server_publickey(session, &srvpubkey);
        if(rc < 0) {
                return -1;
        }
        rc = ssh_get_publickey_hash(srvpubkey, SSH_PUBLICKEY_HASH_SHA256, &hash, &hashlen);
        ssh_key_free(srvpubkey);
        if(rc < 0) {
                cout << "Public Key Hash @ERROR" << endl;
                return -1;
        }
        switch(state) {
                case SSH_KNOWN_HOSTS_OK: {
                        // ok, no problem!
                        cout << "All good!" << endl;
                        break;
                }
                case SSH_KNOWN_HOSTS_CHANGED: {
                        ssh_clean_pubkey_hash(&hash);
                        cout << "Hash: " << hash << endl << "Length: " << hashlen << endl;
                        return -1;
                }
                case SSH_KNOWN_HOSTS_OTHER: {
                        ssh_clean_pubkey_hash(&hash);
                        return -1;
                }
                case SSH_KNOWN_HOSTS_NOT_FOUND: {
                        ssh_clean_pubkey_hash(&hash);
                        return -1;
                }
                case SSH_KNOWN_HOSTS_UNKNOWN: {
                        ssh_clean_pubkey_hash(&hash);
                        return -1;
                }
                case SSH_KNOWN_HOSTS_ERROR: {
                        ssh_clean_pubkey_hash(&hash);
                
                        return -1;
                }
                default: {
                        ssh_clean_pubkey_hash(&hash);
                        return -1;
                }
        }
        ssh_clean_pubkey_hash(&hash);
        ssh_disconnect(session);
        ssh_free(session);

执行此代码时,我遇到 Connection Refused 错误。请注意,我的 SSH 服务器已启动并正在运行,当我尝试通过命令终端进行连接时,它工作正常。我能够连接并做我需要的一切,但是当通过这段代码执行时;如前所述,连接被拒绝。非常感谢任何提示、提示或帮助。

PS。我已启用最大冗长以了解有关该错误的更多信息,但我所说的是提供的全部内容。调试时没有提供更多信息。

【问题讨论】:

    标签: c++ ssh connection libssh


    【解决方案1】:

    这个问题已经解决了。多亏了 tcpdump,我才知道连接到了不同的端口。然后立即引起我注意的是检查端口是如何设置的,错误就在这里:

    ssh_options_set(session, SSH_OPTIONS_PORT, "22");
    

    修复:

    int port = 22;
    ssh_options_set(session, SSH_OPTIONS_PORT, &port);
    

    因为 SSH_OPTIONS_PORT 需要参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-13
      • 2017-06-03
      • 1970-01-01
      • 2023-03-23
      • 2013-08-17
      • 2017-08-24
      • 2022-01-07
      • 2013-01-25
      相关资源
      最近更新 更多