Получите подсказку устройства из консоли устройства, используя libs sh read read - PullRequest
0 голосов
/ 27 февраля 2020

Можно ли получить приглашение устройства для каждой операции ssh_read, используя libs sh? В настоящее время я вижу только результат выполненной команды.

Я подключаюсь к Ubuntu 16.04

Ниже приведен код, который я использую для чтения содержимого папки.

ssh_session my_ssh_session = ssh_new();
if (my_ssh_session == NULL)
    return -1;

int verbosity = SSH_LOG_PROTOCOL;
int port = 22;
char *username = "username";
char *password = "password";

string sFval;
sFval = password;

ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "192.168.10.100");
ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);

int rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK)
{
    fprintf(stderr, "Error connecting to localhost: %s\n",
    ssh_get_error(my_ssh_session));
    return(-1);
}   

rc = ssh_userauth_password(my_ssh_session, username, password);
if (rc != SSH_AUTH_SUCCESS)
{
    fprintf(stderr, "Error authenticating with password: %s\n",
    ssh_get_error(my_ssh_session));
    ssh_disconnect(my_ssh_session);
    ssh_free(my_ssh_session);
    return(-1);
}

ssh_channel 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 SSH_ERROR;
}

rc = ssh_channel_request_shell(channel);

char buffer[2000];
rc = ssh_channel_read_nonblocking( channel, buffer, sizeof(buffer), 0);
while(rc > 0){
    rc = ssh_channel_read_nonblocking( channel, buffer, sizeof(buffer), 0);
}
cout << endl << buffer; 


string sCmd = "ls -l\n";
int RetVal = ssh_channel_write( channel, sCmd.c_str(), sCmd.size());


char buffer1[2000];
rc = ssh_channel_read_nonblocking( channel, buffer1, sizeof(buffer), 0);
while(rc > 0){
    rc = ssh_channel_read_nonblocking( channel, buffer1, sizeof(buffer1), 0);
}
cout << endl << buffer1;    

ssh_channel_send_eof(channel);
ssh_channel_close(channel);
ssh_channel_free(channel);
ssh_free(my_ssh_session);

return 0;

...