繁体   English   中英

C 中的 Libssh 通道请求执行失败

Libssh channel request exec failed in C

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用 Libssh 登录以太网交换机并运行命令。 我可以很好地连接和登录,但无法运行命令。 该程序仅返回“通道请求执行失败”作为 ssh 错误。 程序外的正常 ssh 按预期工作,可以执行命令。 该程序可以在我的本地主机上运行命令就好了。 我也尝试了不同的命令,包括帮助命令或运行时永远不会产生错误的东西。 这是我用来发送命令的 function:

int send_command(ssh_session session, char *command){
    int rc;
    ssh_channel channel;
    
    channel = ssh_channel_new(session);
    if (channel == NULL){
        fprintf(stderr, "***Error in channel creation: %s***\n", ssh_get_error(session));
        exit(-1);
    }

    rc = ssh_channel_open_session(channel);
    if (rc != SSH_OK){
        fprintf(stderr, "***Error opening channel: %s***\n", ssh_get_error(session));
        exit(-1);
    }
    
    rc = ssh_channel_request_exec(channel, command);
    if (rc != SSH_OK){
        fprintf(stderr, "***Error sending command: %d, %s***\n", rc, ssh_get_error(session));
        exit(-1);
    }   

    char buffer[256];
    int nbytes;
    
    nbytes = ssh_channel_read(channel, buffer, sizeof(buffer),0);
    while (nbytes > 0){
        if (fwrite(buffer, 1, nbytes, stdout) != nbytes){
            fprintf(stderr,"***Error writing result: %s***\n", ssh_get_error(session));
            exit(-1);
        }
        nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    }

    ssh_channel_send_eof(channel);
    ssh_channel_close(channel);
    ssh_channel_free(channel);

    return SSH_OK;
}

我认为这可能与交换机使用的自定义 CLI 有关 - 它不是真正的 linux 终端。 我正在登录的交换机处理器正在运行某种我找不到相关信息的简单 linux 操作系统。 我需要考虑不同类型的控制台吗? 即使命令是编程的并且不需要用户输入,我是否应该打开 shell? 我大部分时间都在关注 libssh 教程以使其正常工作,所以我不太了解为什么事情会起作用或不起作用,只是它们会起作用。 如果这很重要,我正在 windows 机器上的 Cygwin 环境中运行它。

问题暂未有回复.您可以查看右边的相关问题.
1 libssh - 多次发送请求并从频道读取答案

我创建了一个会话和一个通道。 应该每秒发送一个请求( ssh_channel_request_exec ),我想读取该请求的答案( ssh_channel_read )。 但是,我找不到如何发出多个请求的示例,api只包含一个如何发出请求,读取答案和关闭通道的示例。 当我尝试按顺序请求 ...

2 使用 libssh 打开到本地主机的通道

我正在开发一个程序,该程序创建到中间人服务器的反向 SSH 隧道,以便无法直接连接到本地网络中的计算机仍然可以从本地网络外部访问。 我为此选择了 libssh 库,但在打开到 localhost 的通道以将传入数据转发到本地应用程序时遇到了问题。 打开 SSH 会话并请求将数据转发到本地计算机似乎工 ...

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

我正在尝试从远程服务器获取命令“ df”的输出,稍后将替换该命令: 编译器未显示任何错误,但运行程序时没有结果,检查了远程服务器的syslog,发现以下行: sshd [12794]:dispatch_protocol_error:键入90 seq 3 请告知可能是什么问题, ...

4 c ++ libssh-ssh_channel_read()始终返回0,而ssh_channel_is_open()返回false

这是我第一次以编程方式实现ssh,并且对为什么我的代码无法正常工作感到困惑-更具体地说, ssh_channel_read()始终返回读取的0个字节。 我不知道我在做什么错! 我一直在逐步遵循API指示,但显然我会无意间忽略某些内容。 我正在尝试使用用户名+密码连接到我的Pi。 这是 ...

5 libssh2-通道读取挂起

我目前正在Perl上开发远程作业调度程序。 它必须通过ssh连接到x服务器并执行已经定义的job / jobs组。 我使用基于libssh2的Net:SSH2。 我的程序通常可以在400/500台服务器上uptime运行,但是当我尝试在1000台服务器上运行基本的uptime命令时 ...

6 libssh-无法连接到本地主机

我不知道为什么我的libssh程序无法连接到本地主机,但对于远程主机却可以正常工作。 该程序可以成功创建会话,但是当我尝试进行身份验证时,它总是在最后一行失败。 我从ssh_userauth_password获得的错误消息是(Access denied. Authentication ...

7 通道 0 上的 PTY 分配请求失败

我试图 ssh 我的路由器。 它首先显示: 然后我ssh-keygen -R 192.168.0.1 (路由器 IP)。 之后,我再次 ssh。 但是,输入密码后,显示: 我在stackoverflow中尝试了几种方法,但都失败了。 我的路由器是带有编译的 openwrt 固件的 TP-Li ...

8 如何修复通道 0 上的请求失败

当我想像这样连接到我的服务器时 它给了我两条错误消息: 当我使用参数-T ,第一条错误消息消失了。 但是如何修复第二个呢? 我无法连接。 我可以毫无问题地连接到其他服务器。 我使用的是 MAC OS 10.9。 参数-v向我展示了这个调试输出: 输入密码后,我得到这个: ...

9 libssh2:如何通过libssh2_channel_write发送数据

编辑:这是完整的代码。 修改了与路由器一起使用的代码,但用例相同。 一旦我使用libssh2_channel_write()发出密码,随后的libssh2_channel_read()就会失败,并显示LIBSSH2_ERROR_SOCKET_RECV。 不知道为什么。 我无法将后续命令发 ...

10 libssh (C++):可以将一些 output 从一些给定的`fd`重定向到远程端的`ssh_channel`?

使用libssh库,可以通过打开通道与远程主机通信: 这个频道是否恰好有一个我可以在远程端访问的文件描述符? 如果我有一个已经在本地打开的文件描述符,是否可以使用通道通知远程主机有关文件描述符的信息? 我有一个现成的可执行文件,我希望在远程端运行,这个可执行文件将 output 写入特定的文件描述 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM