Я пытаюсь получить вывод команды ‘df’, которую я заменю позже, с удаленного сервера:
#include <libssh/libssh.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
ssh_session my_ssh_session;
int rc;
ssh_channel channel;
char buffer[256];
int nbytes;
int port = 22;
my_ssh_session = ssh_new();if (my_ssh_session == NULL)
exit(-1);
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "192.168.2.2");
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);
rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK)
{
fprintf(stderr, "Failed %s\n",
ssh_get_error(my_ssh_session));
exit(-1);
}channel = ssh_channel_new(my_ssh_session);
if (channel == NULL)
return SSH_ERROR;
rc = ssh_channel_open_session(channel);
if (rc != SSH_OK)
{
ssh_channel_free(channel);
return rc;
}
rc = ssh_channel_request_exec(channel, "df");
if (rc != SSH_OK)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return rc;
}
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
while (nbytes > 0)
{
if (write(1, buffer, nbytes) != nbytes)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return SSH_ERROR;
}
nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
}
if (nbytes < 0)
{
ssh_channel_close(channel);
ssh_channel_free(channel);
return SSH_ERROR;
}
ssh_channel_send_eof(channel);
ssh_channel_close(channel);
ssh_channel_free(channel);
return SSH_OK;ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
}
Компилятор не показал никаких ошибок,
но не было результатов, когда я запускаю программу,
Я проверил системный журнал удаленного сервера и обнаружил следующую строку:
sshd [12794]: dispatch_protocol_error: тип 90 seq 3
Посоветуйте пожалуйста в чем может быть проблема,
Спасибо.
Похоже, что вы пытаетесь получить доступ к удаленному серверу без функций аутентификации хоста (например, проверка информации из /.ssh/known_hosts) и аутентификации пользователя через открытые ключи или пароль. Вы должны поместить эти две функции после
if (rc != SSH_OK)
{
fprintf(stderr, "Failed %s\n", ssh_get_error(my_ssh_session));
exit(-1);
}
Посмотрите главы 1 и 2 в учебник по libssh.
Других решений пока нет …