2015-02-27 4 views
0

У меня есть строка, и я хочу проверить, что это открытый ключ SSH. Я попробовал это ($pk содержит имя файла не строка в данном случае):Проверка строки является открытым ключом SSH

#!/usr/bin/perl 
use strict; 
use warnings; 
use Crypt::RSA; 

my $pk = "$ENV{HOME}/.ssh/id_rsa.pub"; 
my $public = new Crypt::RSA::Key::Public(Filename => $pk); 

, но я получаю ошибку как

Bareword found where operator expected at (eval 13) line 1 
<...> 
Can't bless non-reference value at perl5/lib/perl5/Crypt/RSA/Key/Public.pm line 28. 

ответ

0

со ссылкой на предыдущий, но аналогичный ответ:

Is it possible to sign my data using SSH private key in perl?

Я думаю, что вам будет сложно с Crypt::RSA из-за разницы в формате для файлов ключей.

+0

Спасибо, но какая разница? – jreisinger

+0

Ничего. Я бездельничаю. Медведь со мной, и я буду копать немного глубже. # – Sobrique

+0

Да, я думаю, что существует другой формат, используемый для открытых ключей ssh ​​для «нормального». – Sobrique

1

Хорошо, я found "не-Perl" решение:

#!/usr/bin/perl 
use strict; 
use warnings; 
use autodie; 

my $string = '123'; 
my $string2 = <<'EOF'; 
<real public key string> 
EOF 

for my $pk ($string, $string2) { 
    chomp $pk; 

    my $file = '/tmp/pk'; 
    open my $fh, '>', $file; 
    print {$fh} $pk; 
    close $fh; 

    if (!system("ssh-keygen -l -f $file > /dev/null 2>&1")) { 
     print "[$pk] OK\n"; 
    } else { 
     print "[$pk] NOT OK\n"; 
    } 
} 
Смежные вопросы