libssh2を使用してssh経由でコマンドを送信しようとしましたが、期待される応答を受け取れません。libssh2 libでsshを使用してコマンドを送信する
これは私のラズベリーパイとよく繋がっています。 cmd
コマンドで、出力を望んでいるかどうout
がある
char * s7c_hardware::sendCmd(char * cmd, bool out)
{
if (!(channel = libssh2_channel_open_session(session))) return "-1";
libssh2_channel_setenv(channel, "FOO", "bar");
if (libssh2_channel_request_pty(channel, "vanilla")) return "-2";
if (libssh2_channel_shell(channel)) return "-3";
int rc;
while ((rc = libssh2_channel_exec(channel, cmd)) ==
LIBSSH2_ERROR_EAGAIN)
{
waitsocket(sock, session);
}
char * output = "";
if (out)
{
do
{
char buffer[99999];
rc = libssh2_channel_read(channel, buffer, sizeof(buffer));
if (rc > 0)
{
fprintf(stderr, "We read:\n");
for (int i = 0; i < rc; ++i)
fputc(buffer[i], stderr);
fprintf(stderr, "\n");
}
else {
if (rc != LIBSSH2_ERROR_EAGAIN)
fprintf(stderr, "libssh2_channel_read returned %d\n", rc);
}
} while (rc > 0);
}
libssh2_channel_free(channel);
channel = NULL;
return output;
}
:
機能は、コマンドを送信します。
そして、私は「稼働時間」を送信し、アップタイムを受信しようとした場合、私は代わりに、これを受け取る:
We read:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Jul 1 10:27:51 2017 from desktop-ca160hm.local
We read:
[email protected]:~$
'cmd = cmd + '\ n';' Cの文字列はこのようには動作しません。 'cmd'をコンソールに出力してから送信してください。 – iehrlich
また、私は 'C'のために' C++ 'タグを削除しています。 – iehrlich
@iehrlichそれは私のC++アプリケーション用ですが、その部分はCだけです、あなたは正しいです。 'cmd = cmd + '\ n''は私の古いライブラリを使用したためですが、これは必要ありません。 –