タイトルで述べたように、1 つの ssh 接続で複数のファイル (ホスト上の既存のファイルにコンテンツを追加する必要があります) を cat して、それぞれの戻り値を取得しようとしています。つまり、特定のファイルの cat が成功したかどうか。これまでは、ファイルごとに次のコマンドを繰り返して戻り値を確認するだけで、ファイルごとに個別にこれを行っていました。
cat specific_file | ssh user@host -i /root/.ssh/id_rsa "cat >> result/specific_file"
次に、各転送の戻り値を(自動的に)チェックしただけで、各ファイルのステータスを判断できました。私の質問は次のとおりです。単一の ssh 接続を介してこれを行うことは可能ですが、単一のファイルごとに戻り値を取得することはできますか?
前もって感謝します !
編集:
(b)以下に示すように、特定の 1 つのファイルに対してコマンドを生成し、リターン コードを確認します。次に、プログラムのこの部分を含むメソッドが、さまざまな型に対して呼び出されます。
ファイルが正常にログに記録された場合は、クライアントから削除でき、そのファイル タイプへのさらなるログ記録は (引き続き) 許可されます。ファイルが制限を超えている場合、このビットはプログラムの別の部分で設定解除されます。
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;
}
}
2番目の編集:
プログラムの一部としてルーターでこのコードを実行しています。システムに新しいライブラリや非基本機能を追加することは許可されていないことに注意してください。さらに、システム自体の ssh クライアントは「-M」モードを許可しません。