2013-05-02 2 views
0

Я запускаю следующие строки кода в perl-скрипте, чтобы найти выход df удаленных машин. это прекрасно работает и собирает информацию в @df_ret до тех пор, пока ключ ssh не будет отменен. если общественность повреждена или изменена, то она не показывает никаких признаков ошибки в скрипте. если я буду запускать вручную, тогда меня попросят ввести пароль.ssh проверка входа в perl

@df_ret = split /\n/, `ssh -q $server 'df -hP'`; 

Есть ли способ, я могу проверить, что если SSH Войти успешно, то этот скрипт на Perl строка должна быть выполнена еще нет. находил много поисков на нем, но не мог добраться до ОДНОГО. любая помощь?

ответ

1

У меня одно решение работает, как показано ниже; ! #/USR/местные/бен/Perl

my $line = `ssh $server -o 'BatchMode=yes' -o 'ConnectionAttempts=1' true`; 
my $error = `echo $?`; 

print "Error = $error"; 

if($error == 0) 
{ 
    print "This is good"; 
    @df_ret = split /\n/, `ssh -q $server 'df -hP'`; 
} 
else 
{ 
    print "This is bad"; 
} 
+0

Исправление: 'my $ error = $? >> 8; 'потому что' $? '- внутренняя переменная Perl (которая имеет то же имя, что и' $? 'Вашей оболочки Unix). – dolmen

0

Проверить результат ssh Exec перед разбиением его:

$text = `ssh -q $server 'df -hP'` or die "unable to ssh\n"; 
@df_ret = split /\n/, $text; 
+0

Вот выход из первой линии ..../1.pl Пароль: Пароль: Пароль: ./1.pl: линия 1: =: команда не найдена –

+0

У меня есть что-то вроде «ssh-server -o» BatchMode = yes '-o' ConnectionAttempts = 1 'true', который, кажется, работает до тех пор, пока не будет пропущен ... поиск хороших золей –

Смежные вопросы