正如标题中所说,我正在尝试通过一个 ssh 连接对多个文件(内容需要附加到主机上的现有文件)进行分类,并为每个文件获取返回值,即特定文件的 cat 是否成功。到目前为止,我为每个文件单独执行此操作,只需为每个文件重复以下命令并检查返回值。
cat specific_file | ssh user@host -i /root/.ssh/id_rsa "cat >> result/specific_file"
然后我只检查了每次传输的返回值(自动),从而可以确定每个文件的状态。我的问题是:是否可以通过一个 ssh 连接来实现这一点,但要为每个文件获取一个返回值?
提前致谢 !
编辑:
(b)正如您在下面看到的,我为一个特定文件生成一个命令,然后检查返回码。然后为不同的类型调用包含程序这一部分的方法
如果文件被成功记录,它可以从客户端中删除,并且(仍然)允许进一步记录到文件类型。如果文件超出其限制,则该位在程序的另一部分中未设置。
sprintf(command,"/bin/cat /root/%s%s | /usr/bin/ssh log-bot@192.168.5.1 -i"
" /root/.ssh/id_rsa \"/bin/cat >> result/%s%s\"", apmac,
ending_str[source], apmac, ending_str[dest]);
rc = system(command);
if(rc != 0)
{
sprintf(buffer, "[%i] - LOG ERROR from %s to %s CODE %i ", (int)time(0),
ending_str[source], ending_str[dest], rc);
sprintf(filename,"%s%s%s", LOCAL, apmac, ending_str[source]);
}
else
{
sprintf(filename,"%s%s%s", LOCAL, apmac, ending_str[source]);
remove(filename);
sprintf(buffer, "[%i] - LOG process from %s to %s ok", (int)time(0),
ending_str[source], ending_str[dest]);
switch(source)
{
case PROBE_FILE:
LOG_MASK_SET(globals->log_mask, LOG_MASK_PROB);
break;
case LIST_FILE:
LOG_MASK_SET(globals->log_mask, LOG_MASK_LIST);
break;
case SCAN_FILE:
LOG_MASK_SET(globals->log_mask, LOG_MASK_SCAN);
break;
default:
/* Other cases not YET considered */
break;
}
}
第二次编辑:
我在路由器上运行此代码作为程序的一部分。请注意,我不允许向系统添加新库或非基本功能。此外,系统本身的 ssh 客户端不允许使用“-M”模式。