[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How can I open one channel and than execute several different commands in libssh?
[Thread Prev] | [Thread Next]
- Subject: Re: How can I open one channel and than execute several different commands in libssh?
- From: 孙世龙 sunshilong <sunshilong369@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Sun, 7 Feb 2021 09:34:46 +0800
- To: libssh@xxxxxxxxxx
Bruno, Thank you for your reply. >I do not have my notebook now. >But you have to open a channel per each command. If so, then one more question raises, how the "ssh"(i.e. a command that could execute on Linux) could achieve this goal? Best regards. Sunshilong On Sun, Feb 7, 2021 at 9:13 AM 孙世龙 sunshilong <sunshilong369@xxxxxxxxx> wrote: > > Hi,list > > For example i want to open one session and one channel and then > execute severeal different commands. I have InitializeSSHSession and > Initialize SSH channel methods can be seen below. > > 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); > } > } > } > > And in the main, I am initializing session and getting channel like this: > > InitializeSSHSession(); > ssh_channel channel = GetSSHChannel(); > > And then > > int rc = ssh_channel_request_exec(channel, "ls -l"); > > It is okay it is executed correctly but when i want to execute another > command it is not execute, I should return the beginning of process > first initialize session and getting channel again. > > It is not good solution for every command. Is it possible to do that > once initialize session than use it again and again for every command > ?
How can I open one channel and than execute several different commands in libssh? | 孙世龙 sunshilong <sunshilong369@xxxxxxxxx> |