Невозможно запустить сценарий 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", а затем повторите попытку.