Попытка реализовать двойную аутентификацию в SFTP - PullRequest
1 голос
/ 21 апреля 2019

В соответствии с требованиями моего клиента, я пытаюсь реализовать двойную аутентификацию (пароль, ключ) при передаче файла SFTP, и предпочтительная аутентификация должна быть в порядке пароля, открытого ключа, взаимодействия с клавиатурой.

Я пытался добиться этого двумя способами:

1) Использование NET :: SFTP :: Foreign Но этот модуль имеет предпочитаемую аутентификацию по умолчанию в качестве открытого ключа, пароля и не позволяет мне переопределить то же самое с помощьюпароль, открытый ключ, даже если я явно упоминаю в команде.

$sftp=Net::SFTP::Foreign->new("xyz.com",
                              user=> pqr,                            
                              password=>1234,
                              port=>2222,                                 
                              key_path=>/home/ddd/.ssh/id_rsa,
                              more=>[-vo=>'StrictHostKeyChecking=no',
                                     -o=>"ProxyCommand=/usr/bin/ssh " .
                                         "-o UserKnownHostsFile=/dev/null ".
                                         "-o StrictHostKeyChecking=no ".
                                         "-oPreferredAuthentications=password,publickey,keyboard-interactive " .
                                         "-oNumberOfPasswordPrompts=1 " .
                                         "-i /home/nnn/.ssh/flsftp " .
                                         "-l flsftp proxyserver.com " .
                                         "nc xyz.com 2222"]);

2) С помощью команды SFTP я могу установить соединение вручную с помощью команды SFTP и ввести пароль, когда он запрашивает, но автоматизировать его с помощьюPerl Я не могу найти способ передать пароль в командной строке.Я познакомился с некоторыми способами, такими как sshpass или ожидаемый, но по соображениям безопасности я не могу использовать ни один из них.

sftp -o UserKnownHostsFile=/dev/null \
     -o StrictHostKeyChecking=no \
     -i /home/ddd/.ssh/id_rsa \
     -o PreferredAuthentications=password,publickey,keyboard-interactive \
     -o NumberOfPasswordPrompts=1 \
     -o 'ProxyCommand=/usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/nnn/.ssh/flsftp -l flsftp proxyserver.com nc xyz.com 2222' \
     pqr@xyz.com

1 Ответ

2 голосов
/ 23 апреля 2019

Net :: SFTP :: Foreign пытается обнаружить случай, когда вы сами установили PreferredAuthentications, чтобы пропустить его без изменений. Просто код обнаружения не очень сложен, а иногда и дает сбой. Попробуйте сделать это следующим образом:

$sftp=Net::SFTP::Foreign->new("xyz.com",
                              user => "pqr",                            
                              password => "1234",
                              port => 2222,                                 
                              key_path => "/home/ddd/.ssh/id_rsa",
                              more => ['-v',
                                       -o => 'StrictHostKeyChecking=no',
                                       -o => 'UserKnownHostsFile=/dev/null',
                                       -o => 'PreferredAuthentications=password,publickey,keyboard-interactive']);
...