É o fim, eu escrevi este wrapper ssh para contornar janelas OpenSSH com bugs que requerem STDIN até mesmo para comandos não interativos que não o usam:
#!/usr/bin/perl
use strict;
use warnings;
use Net::OpenSSH;
my $HOSTNAME = shift;
my $ssh = Net::OpenSSH->new($HOSTNAME);
my ($in_pipe, undef, undef, $pid) =
$ssh->open_ex( { stdin_pipe => 1 }, @ARGV) or die "open_ex failed: " . $ssh->error;
waitpid($pid, 0);
Ele usa somente nome de host e comando com argumentos para executar, nenhum outro parâmetro é permitido (eu os defino em ~/.ssh/config
), portanto, você executa o script (por exemplo) como myssh winserver whoami < /dev/null
. É apenas um wrapper em torno do cliente ssh, que fornece STDIN falso e, portanto, permite que sessões ssh não-interativas sejam executadas a partir de cron (8) e atd (8)