#!/usr/bin/perl # This script contains a rude implementation of a custom login handler # for password authentication. use strict; use warnings; use Net::OpenSSH; my ($host, $user, $passwd) = @ARGV; sub mi_login_handler { my ($ssh, $pty, $data) = @_; # print "custom login handler called!"; my $read = sysread($pty, $$data, 1024, length $$data); if ($read) { # print "buffer: >$$data<\n"; if ($$data =~ s/.*://s) { print $pty "$passwd\n"; return 1; } } return 0; } my $ssh = Net::OpenSSH->new($host, user => $user, master_opts => [-o => 'NumberOfPasswordPrompts=1', -o => 'PreferredAuthentications=keyboard-interactive,password'], login_handler => \&mi_login_handler); $ssh->error and die "Unable to connect to remote machine" . $ssh->error; $ssh->system("ls");