Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用libssh libary通过SSH检索数据失败_C++_Linux_Gcc_Libssh - Fatal编程技术网

C++ C++;使用libssh libary通过SSH检索数据失败

C++ C++;使用libssh libary通过SSH检索数据失败,c++,linux,gcc,libssh,C++,Linux,Gcc,Libssh,我正在尝试从远程服务器获取命令“df”的输出,稍后将替换该命令: #include <libssh/libssh.h> #include <stdlib.h> #include <stdio.h> int main() { ssh_session my_ssh_session; int rc; ssh_channel channel; char buffer[256]; int nbytes; int port

我正在尝试从远程服务器获取命令“df”的输出,稍后将替换该命令:

#include <libssh/libssh.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    ssh_session my_ssh_session;
    int rc;
    ssh_channel channel;
    char buffer[256];
    int nbytes;
    int port = 22;
    my_ssh_session = ssh_new();


    if (my_ssh_session == NULL)
    exit(-1);
    ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "192.168.2.2");
    ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);

    rc = ssh_connect(my_ssh_session);

    if (rc != SSH_OK)
            {
            fprintf(stderr, "Failed %s\n",
            ssh_get_error(my_ssh_session));
            exit(-1);
            }



    channel = ssh_channel_new(my_ssh_session);
    if (channel == NULL)
    return SSH_ERROR;

    rc = ssh_channel_open_session(channel);
    if (rc != SSH_OK)
            {
            ssh_channel_free(channel);
            return rc;
            }
    rc = ssh_channel_request_exec(channel, "df");
    if (rc != SSH_OK)
            {
            ssh_channel_close(channel);
            ssh_channel_free(channel);
            return rc;
            }
    nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    while (nbytes > 0)
            {
            if (write(1, buffer, nbytes) != nbytes)
                    {
                    ssh_channel_close(channel);
                    ssh_channel_free(channel);
                    return SSH_ERROR;
                    }
            nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
            }
    if (nbytes < 0)
            {
            ssh_channel_close(channel);
            ssh_channel_free(channel);
            return SSH_ERROR;
            }
    ssh_channel_send_eof(channel);
    ssh_channel_close(channel);
    ssh_channel_free(channel);
    return SSH_OK;




ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
}
#包括
#包括
#包括
int main()
{
ssh_会话我的ssh_会话;
int rc;
ssh_信道;
字符缓冲区[256];
整数字节;
int端口=22;
my_ssh_session=ssh_new();
if(my_ssh_session==NULL)
出口(-1);
ssh_选项集(我的ssh_会话,ssh_选项_主机,“192.168.2.2”);
ssh\u选项集(我的ssh\u会话、ssh\u选项\u端口和端口);
rc=ssh\u connect(我的ssh\u会话);
如果(rc!=SSH\u确定)
{
fprintf(标准,“失败的%s\n”,
ssh_获取_错误(我的ssh_会话));
出口(-1);
}
channel=ssh\u channel\u new(我的ssh\u会话);
如果(通道==NULL)
返回SSH_错误;
rc=ssh\u channel\u open\u会话(channel);
如果(rc!=SSH\u确定)
{
ssh_信道_空闲(信道);
返回rc;
}
rc=ssh\u channel\u request\u exec(通道,“df”);
如果(rc!=SSH\u确定)
{
ssh_通道_关闭(通道);
ssh_信道_空闲(信道);
返回rc;
}
nbytes=ssh\u channel\u read(通道,缓冲区,sizeof(缓冲区),0);
而(n字节>0)
{
if(写入(1,缓冲区,N字节)!=N字节)
{
ssh_通道_关闭(通道);
ssh_信道_空闲(信道);
返回SSH_错误;
}
nbytes=ssh\u channel\u read(通道,缓冲区,sizeof(缓冲区),0);
}
如果(n字节<0)
{
ssh_通道_关闭(通道);
ssh_信道_空闲(信道);
返回SSH_错误;
}
ssh_信道_发送_eof(信道);
ssh_通道_关闭(通道);
ssh_信道_空闲(信道);
返回SSH_OK;
ssh\u断开连接(我的ssh\u会话);
ssh_free(我的ssh_会话);
}
编译器没有显示任何错误, 但我运行程序时没有结果, 我检查了远程服务器的系统日志,发现以下行:

sshd[12794]:调度协议错误:类型90 seq 3

请告知可能出现的问题


谢谢。

您似乎试图在没有主机身份验证功能(例如,通过公钥或密码检查来自/.ssh/known_hosts的信息)和用户身份验证A的情况下访问远程服务器。您应该将这两个函数放在

if (rc != SSH_OK)
{
fprintf(stderr, "Failed %s\n", ssh_get_error(my_ssh_session));
exit(-1);
}

查看中的第1章和第2章。

上面是否有一行写着“来自…的失败密码?”程序返回什么exitcode?你可以用$找到答案吗?在运行它之后,在您的shell中。此外,使用调试器单步执行将显示它退出的位置。不,只需我提到的那一行和另一行表示连接已关闭,我将检查调试器。