#linux #perl #sftp
#linux #perl #sftp
Вопрос:
Я пытаюсь использовать сценарий perl для передачи файлов с одного компьютера на другой в рамках задания cron. Однако по соображениям безопасности задание cron должно выполняться от имени непривилегированного пользователя. Теперь, если я попытаюсь установить соединение с помощью этого непривилегированного пользователя, Net::SFTP::Foreign
он всегда отказывается подключаться. Вот часть скрипта, с которой у меня возникли проблемы:
my $host = "hostname";
my %args = (
user => "username",
password => "password",
port => '12345'
);
my $sftp_connection = Net::SFTP::Foreign->new($host, %args);
if( $sftp_connection->error ) {
log_message( "E", "Error " . $sftp_connection->status() . " connecting to " . $host );
die;
}
log_message( "A", "Connected" );
Я не могу привести полный пример, так как для этого потребуется имя пользователя и пароль.
Если я выполняю этот скрипт от имени root, все работает нормально, однако, если я пытаюсь использовать другого пользователя, соединение всегда прерывается.
Есть ли способ получить дополнительную диагностическую информацию? Я думаю, что был способ получить больше выходных данных от фактического процесса sftp, но я не могу найти его прямо сейчас, поскольку cpan в настоящее время отсюда не работает.
Ранее я также пытался использовать Net::SFTP
вместо Net::SFTP
, но обработка ошибок в более поздних частях работала некорректно, поэтому переключение на Net::SFTP
сейчас не кажется жизнеспособным вариантом.
Комментарии:
1. Я не могу воспроизвести вашу проблему, есть ли какая-то важная вещь, отсутствующая в этом примере? Вы пытались установить соединение с помощью команды ssh / sftp из учетной записи, не имеющей привилегий?
2. Включить отладку:
$Net::SFTP::Foreign::debug = -1;
3. @Salva: Спасибо за подсказку с отладкой, я не смог ее найти, потому что CPAN был недоступен.
4. Вам не нужен доступ к веб-интерфейсу CPAN, чтобы прочитать документацию для установленных модулей. Просто используйте
perldoc
с терминала. В большинстве дистрибутивов Linux документы модуля также устанавливаются как справочные страницы :man Net::SFTP::Foreign
.5. @Salva: Спасибо за подсказку. Я почти никогда не использую Perl, поэтому постараюсь запомнить это в следующий раз.
Ответ №1:
-
Использование metacpan.org
-
Отладка:
Для целей отладки вы можете запустить ssh в подробном режиме, передав ему опцию -v: my $sftp = Net::SFTP::Foreign->new($host, more => '-v');
Комментарии:
1. Привет, добро пожаловать в SO. Этот ответ скорее «комментарий», чем «ответ». Если OP отвечает выводом из попыток отладки, вы можете отредактировать свой ответ, чтобы предоставить полный ответ.
2. Привет. Я хотел добавить комментарий, но получил сообщение об ошибке отсутствия репутации :(.
Ответ №2:
Включив отладку (спасибо всем комментаторам), я увидел, что проверка ключа хоста не удалась. Итак, после того, как я добавил ключ в список разрешенных ключей (выполнив ручной ssh для хоста один раз), все работало нормально.
Для root ключ, должно быть, уже был в списке, так что он не имел ничего общего с привилегиями, только с предыдущим использованием учетной записи (кажется, я уже подключался по ssh от root к другому хосту).