Почему ssh запрашивает у меня пароль после того, как я передаю его в Perl Net :: SSH :: Perl? - PullRequest
1 голос
/ 31 августа 2009

Я использую Net :: SSH :: Perl для выполнения команды на удаленном сервере следующим образом:

use Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my ($stdout, $stderr, $exit) = $ssh->cmd($cmd);

Но когда я выполняю приведенный выше скрипт, снова появляется запрос пароля. То есть пароль, который я указал в $ pass, не используется для установления соединения ssh. Почему это? Есть идеи, как мне это преодолеть? Я даю ниже отладочную информацию:

serv1: Reading configuration data /root/.ssh/config
serv1: Reading configuration data /etc/ssh_config
serv1: Allocated local port 1023.
serv1: Connecting to 15.154.59.63, port 22.
serv1: Remote protocol version 1.99, remote software version OpenSSH_4.2
serv1: Net::SSH::Perl Version 1.34, protocol version 1.5.
serv1: No compat match: OpenSSH_4.2.
serv1: Connection established.
serv1: Waiting for server public key.
serv1: Received server public key (768 bits) and host key (1024 bits).
serv1: Host '15.154.59.63' is known and matches the host key.
serv1: Encryption type: DES3
serv1: Sent encrypted session key.
serv1: Received encryption confirmation.
serv1: RSA authentication failed: Can't load public key.
serv1: Doing challenge response authentication.
Password:

Запрос пароля не должен быть правильным, учитывая, что я уже ввел пароль в переменной $ pass?

ОБНОВЛЕНИЕ (на основе полученных комментариев):

Я попробовал следующее:

my $ssh = Net::SSH::Perl->new($host, debug =>1, identity_files => []);

Теперь я не получаю сообщение «Ошибка аутентификации RSA:», но все равно появляется запрос пароля. Я даю ниже отладочную информацию:

serv1: Allocated local port 1023. 
serv1: Connecting to 15.154.59.63, port 22. 
serv1: Remote protocol version 1.99, remote software version OpenSSH_4.2 
serv1: Net::SSH::Perl Version 1.34, protocol version 1.5. 
serv1: No compat match: OpenSSH_4.2. kf-linux-dm3: Connection established. 
serv1: Waiting for server public key. 
serv1: Received server public key (768 bits) and host key (1024 bits).
serv1: Host '15.154.59.63' is known and matches the host key.
serv1: Encryption type: DES3 
serv1: Sent encrypted session key.
serv1: Received encryption confirmation. 
serv1: Doing challenge response authentication. 
Password:

Может ли кто-нибудь просветить меня?

Ответы [ 3 ]

5 голосов
/ 31 августа 2009

Эта строка в ваших ошибках:

serv1: Ошибка аутентификации RSA: не удается загрузить открытый ключ.

говорит мне, что ваша программа пытается сделать автоматический вход в систему , а это не то, что вы хотите делать, когда вам нужен пароль для входа в систему.

Проверьте документацию Perl / ssh :

identity_files

Список файлов идентификации RSA / DSA, которые будут использоваться при аутентификации RSA / DSA. Значение этого аргумента должно быть ссылкой на массив строк, каждая строка идентифицирует местоположение файла идентификации. Каждый файл идентификации будет проверяться на сервере, пока клиент не найдет тот, который успешно аутентифицируется.

Если вы не предоставите это, для аутентификации RSA по умолчанию используется $ ENV {HOME} /. Ssh / identity, а для аутентификации DSA по умолчанию используется $ ENV {HOME} /. Ssh / id_dsa.

Вы можете попробовать установить identity_files в пустой массив, чтобы посмотреть, заставляет ли он использовать ваш пароль; или вы можете установить аутентификацию с открытым ключом, как показано на ссылке выше.

1 голос
/ 02 сентября 2009

serv1: проверка подлинности ответа на вызов.

Это ваша ключевая линия. SSH на самом деле имеет несколько типов парольной аутентификации. Один из них - это аутентификация по парольному паролю (контролируемая параметром PasswordAuthentication в /etc/sshd_config), я подозреваю, что именно для этого и отправлено $pass. Другим примером является аутентификация по запросу-вызову , когда сервер отправляет одну или несколько задач, и ожидается, что вы ответите с правильными ответами. Ссылка и Спецификация .

Итак, технически ssh не запрашивает пароль. Он запрашивает у вас ответ на произвольный вызов с сервера, и этот вызов просто "Password:".

Возможно, это будет работать, если вы явно используете Net :: SSH :: Perl :: KeyboardInt ?

Конечно, вы действительно должны установить аутентификацию открытого ключа RSA.

0 голосов
/ 08 мая 2015

Вам необходимо отключить аутентификацию ChallengeResponse:

#!/usr/bin/perl
use strict;
use Net::SSH::Perl;

my $user = 'user';
my $pw = 'pw';
my $host = 'some.server';
my $cmd = 'id';

my %params = (
    'debug' => 0,
);

# get the ssh connection object
my $ssh = Net::SSH::Perl->new($host, %params);
# get the configuration object associated with the host connection
my $cfg = $ssh->config;
# disable challenge/response authentication
my $v = $cfg->set('auth_ch_res', 0);
# set the login parameters
$ssh->login($user, $pw);
# issue the command (which is when the authentication actually takes place)
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
# do what you want with the result
print $stdout;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...