2012-03-28 2 views
-1

SSH2를 사용하여 시스템에 명령을 보내기위한 Perl 스크립트를 만들고 있습니다. 이것은 표준 리눅스 쉘이 아니며 독점적 인 쉘입니다. 그것은 SSH 명령 ([email protected] 명령)을 통해 명령을 받아들이지 않지만 먼저 연결하여 쉘에 명령을 제공해야합니다.Perl Net :: SSH2가 채널()에서 멈 춥니 다.

나는 다음과 같은 스크립트를 내놓았다했습니다

#!/usr/bin/perl 

use Net::SSH2; 

my $host = "192.168.1.2"; 
my $user = "admin"; 
my $password = ""; 

#-- set up a new connection 
my $ssh = Net::SSH2->new(); 
$ssh->connect($host); 

#-- authenticate 
$ssh->auth_password($user, $password); 

#-- creating a channel 
my $channel = $ssh->channel(); 

#-- running a command 
$channel->exec("xstatus"); 

#-- Closing the connection 
$channel->close; 
$ssh->disconnect; 

문제는 그러나 그것은 '$하고 ssh> 채널()'라인에 달려 있다는 것입니다. 대기중인 메시지가 없어지지 않습니다. 그 아래에있는 모든 줄을 제거하려고했지만 문제는 남아 있습니다. 'channel()'행을 삭제하면 즉시 시작됩니다. 이 버그는 Net :: SSH2 모듈의 버그입니까? 아니면 내가 끔찍한 일을하고 있습니까?

+1

글쎄,'auth_password'의 반환 값을 검사하여 실제로 인증했는지 확인할 수 있습니다 ... –

+0

또한 $ ssh-> auth_keyboard ($ user, $ password)를 시도하거나 "can not connect $ @" ; –

+1

Net :: SSH2의 버그 일 수 있습니다. 'connect' 또는'auth_password'가 실패하더라도 그것은'channel'에서 영원히 차단해서는 안됩니다. – salva

답변

0

Per @ user1269955 : 알아 냈습니다. 키보드 대화 형 로그온을 위해 'auth_keyword'로 'auth_password'를 바꾸어야했습니다.

관련 문제