[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> |