Как я могу открыть один канал и затем выполнить несколько разных команд в libssh?

Например, я хочу открыть один сеанс и один канал, а затем выполнить различные команды. У меня есть InitializeSSHSession и Initialize SSH channel, методы можно увидеть ниже.

 void Computer::InitializeSSHSession()
{
ssh_session remoteSSHSession = ssh_new();

if ( remoteSSHSession )
{
QString password = this->GetPassword();
QString remoteIP = this->GetIP();
QString userName = this->GetUserNameW();

ssh_options_set(remoteSSHSession, SSH_OPTIONS_HOST, remoteIP.toStdString().c_str());
ssh_options_set(remoteSSHSession, SSH_OPTIONS_LOG_VERBOSITY, &sessionVerbosity);
ssh_options_set(remoteSSHSession, SSH_OPTIONS_PORT, &sessionPort);
ssh_options_set(remoteSSHSession, SSH_OPTIONS_USER, userName.toStdString().c_str());

int remoteConnection = ssh_connect(remoteSSHSession);
if ( remoteConnection == SSH_OK )
{
int authenticateControl = ssh_userauth_password(remoteSSHSession, NULL, password.toStdString().c_str());
if ( authenticateControl == SSH_AUTH_SUCCESS )
{
InitializeSSHChannel(remoteSSHSession);
}
else
{
remoteSSHSession = NULL;
}
}
else
{
remoteSSHSession = NULL;
}
}
else
{
remoteSSHChannel = NULL;
}
}

void Computer::InitializeSSHChannel(ssh_session remoteSSHSession)
{
remoteSSHChannel = ssh_channel_new(remoteSSHSession);

if ( remoteSSHChannel )
{
int channelControl = ssh_channel_open_session(remoteSSHChannel);
if ( channelControl != SSH_OK )
{
EventLogger::LogMessage(true, "SSH channel sesssion failed!");
ssh_channel_free(remoteSSHChannel);
}
}
}

И в основном я инициализирую сессию и получаю канал следующим образом:

 InitializeSSHSession();
ssh_channel channel = GetSSHChannel();

А потом

  int rc = ssh_channel_request_exec(channel, "ls -l");

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

Это не хорошее решение для каждой команды.
Можно ли сделать это после инициализации сеанса, а затем использовать его снова и снова для каждой команды?

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]