Instead of closing the channel, try closing the socket and then disconnecting the full session:
my $socket = $ssh->socket; my $chan = $ssh->channel(); $chan->exec("/sbin/fwupdate -m\n"); close $socket; $ssh->disconnect;
Though, even then there is a race condition: fwupdate may be faster taking control of the machine than the SSH server responding to the SSH_MSG_CHANNEL_REQUEST request.
Setting blocking to 0 could help there, but them, the exec method may fail and you will never know if the command was delivered or not:
my $chan = $ssh->channel(); $ssh->blocking(0); $chan->exec("/sbin/fwupdate -m\n");
Alternatively, if you are running your script in a Unix/Linux box, instead of Net::SSH2, you could use Net::OpenSSH (the OpenSSH client used by the module under the hood is able to detect staled connections):
use Net::OpenSSH; my $ssh = Net::OpenSSH->new($host, timeout => 30); $ssh->scp_put($firmware[$antenna_type],'/tmp/fwupdate.bin'); $ssh->system("/sbin/fwupdate -m\n");
In reply to Re: Net::SSH2 exec timeout
by salva
in thread Net::SSH2 exec timeout
by £okì
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |