Невозможно запустить сценарий perl для входа по ssh на сервер Windows (используя Net::SSH::Perl) из crontab

У меня есть скрипт Perl, который делает удаленный вход на сервер Windows через Net::SSH::Perl модуль.

Если я запускаю скрипт вручную из своей оболочки, он не выдает ошибку. Однако при запуске из crontab он правильно подключается к удаленному серверу Windows, но не может войти в систему.

Вот сценарий:

use Net::SSH::Perl;
use Date::Calc qw(:all);
use DateTime::Format::Epoch;

$lin_host = `hostname -s`;
chomp($lin_host);
print "Test script is started on server $lin_host at time ",join(":",Now()),"\n";
$host = "any valid ip";
$user = "valid username";
$pass = "valid password";
$port = "valid port";

if ($ARGV[0] eq "eodupdate")
{
        $host = "valid host";
}

print "Connecting : $host with user $user and pwd $pass\n";
my $ssh = Net::SSH::Perl->new($host,port=>$port);
if ($ssh eq undef)
{
        print "Can't connect to server $host\n";
        exit;
}
print "Connected ... \nNow ,Trying to loggin ,sever ip : $host\n";
$ssh->login($user, $pass);
print "Yeah , successfully logged in to $host\n";

На сервере A, запустив этот скрипт в оболочке csh, я получаю вывод:

Test script is started on server name
Connecting : * with user * and pwd *
Connected ...
Now ,Trying to loggin ,sever ip : *
Yeah , successfully logged in to *

В оболочке, perl test.pl а также sudo perl test.pl оба работают нормально.

Но запускаем этот скрипт в cron как пользователь root:

Test script is started on server name
Connecting : * with user * and pwd *
Connected ...
Now ,Trying to loggin ,sever ip : * 

Примечание: я могу сделать это на другом сервере Linux B с теми же правами доступа к файлу, тем же именем пользователя и тем же паролем. Разница в том, что когда я запускаю этот Perl-скрипт без sudo на сервере B я получаю эту ошибку:

host key has changed! at /usr/local/share/perl5/Net/SSH/Perl/Kex/DH1.pm line 49

Я не вижу этой ошибки на сервере Linux A (на котором я не могу подключиться через cron)

Что не так и как я могу это решить?

1 ответ

Решение

Похоже, что проверка ключа хоста не может предотвратить аутентификацию. Могут быть ключи хоста, хранящиеся в ~/.ssh/known_hosts в домашнем каталоге пользователя (root), попробуйте удалить ключ удаленного хоста из "known_hosts", а затем повторите попытку.

Другие вопросы по тегам