В соответствии с требованиями моего клиента, я пытаюсь реализовать двойную аутентификацию (пароль, ключ) при передаче файла 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