我创建了一个会话和一个通道。 应该每秒发送一个请求( ssh_channel_request_exec ),我想读取该请求的答案( ssh_channel_read )。 但是,我找不到如何发出多个请求的示例,api只包含一个如何发出请求,读取答案和关闭通道的示例。 当我尝试按顺序请求 ...
提示:本站收集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 环境中运行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.