Нет подключения как некорневого с использованием Net ::SFTP ::Foreign

#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:

  1. Использование metacpan.org

  2. Отладка:

Для целей отладки вы можете запустить ssh в подробном режиме, передав ему опцию -v: my $sftp = Net::SFTP::Foreign->new($host, more => '-v');

«Описание модуля»

Комментарии:

1. Привет, добро пожаловать в SO. Этот ответ скорее «комментарий», чем «ответ». Если OP отвечает выводом из попыток отладки, вы можете отредактировать свой ответ, чтобы предоставить полный ответ.

2. Привет. Я хотел добавить комментарий, но получил сообщение об ошибке отсутствия репутации :(.

Ответ №2:

Включив отладку (спасибо всем комментаторам), я увидел, что проверка ключа хоста не удалась. Итак, после того, как я добавил ключ в список разрешенных ключей (выполнив ручной ssh для хоста один раз), все работало нормально.

Для root ключ, должно быть, уже был в списке, так что он не имел ничего общего с привилегиями, только с предыдущим использованием учетной записи (кажется, я уже подключался по ssh от root к другому хосту).