package TAEB::Interface::SSH; use TAEB::OO; use constant ping_wait => .3; =head1 NAME TAEB::Interface::SSH - how TAEB talks to /dev/null =cut extends 'TAEB::Interface::Local'; has server => ( is => 'ro', isa => 'Str', default => 'devnull.kraln.com', ); has account => ( is => 'ro', isa => 'Str', ); has password => ( is => 'ro', isa => 'Str', ); sub _build_pty { my $self = shift; TAEB->log->interface("Connecting to " . $self->server . "."); my $pty = IO::Pty::Easy->new; $pty->spawn('ssh', $self->server, '-l', $self->account); alarm 20; eval { local $SIG{ALRM} = sub { die "timeout" }; my $output = ''; while (1) { $output .= $pty->read(0) || ''; if ($output =~ /password/) { alarm 0; last; } } }; die "Died ($@) while waiting for password prompt.\n" if $@; $pty->write($self->password . "\n\n", 0); TAEB->log->interface("Connected to " . $self->server . "."); return $pty; } __PACKAGE__->meta->make_immutable; no TAEB::OO; 1;