2016-03-10 7 views
0

У меня есть веб-интерфейс и логин, в котором выполняется проверка подлинности, проверяя, может ли пользователь входить на сервер или нет.Net :: SSH2 аутентификация без пароля

use Net::SSH2; 

#Get $un and $pw as POST data. 

my $ssh2 = Net::SSH2->new(); 
$ssh2->connect('localhost') or die $!; 

if($ssh2->auth_password($un, $pw)){ 
    $c->session->{logged} = 1; 
} 

Я не хочу хранить пароль для сеанса.

И позже в потоке мне нужно выполнить некоторую команду на сервере зарегистрированным пользователем. Итак, в этот момент мне снова нужен пароль, чтобы сделать аутентификацию ssh2 (Выполнение может быть позже в потоке с другой страницы). Мой вопрос: как только я сделаю аутентификацию в первый раз, могу ли я хранить что-либо (может быть закрытым) для сеанса или для пользователя, чтобы не запрашивать пароль второй раз.

ответ

0

Я не думаю, что вы можете сделать это таким образом. Сеанс Catalyst может хранить пользовательские данные, но вам нужно знать, что Net :: SSH2 - это модуль XS, поэтому объект Net :: SSH2 будет XS. Если вы попытаетесь сохранить подключенный объект Net :: SSH2, вы получите основной дамп.

Свалка Сети :: SSH2 Objet выглядит следующим образом:

$VAR1 = bless(do{\(my $o = 137381360)}, 'Net::SSH2'); 

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

+0

Я не собираюсь хранить объект $ ssh2 в сеансе. Мне нужно как-то генерировать общедоступные/частные ключи для пользователя во время первого входа. а затем аутентификацию ключа пользователя во время выполнения команды. –