2014-03-31 3 views
0

여기 스크립트에서 두 개의 CPAN 모듈을 사용하려고합니다. 내 코드에서 사용한 것 이외의 다른 적절한 방법이 있습니까?스크립트에서 두 개의 CPAN 모듈을 사용하는 방법

#!/usr/bin/perl -w 
$host='example/cp,'; 
$user='usertest'; 
$pass='kjasdkjd'; 
$cmd='su -'; 
$stdin='jkhasdj'; 
#$cmd='passwd'; 
use Net::SSH::Perl; 
my $ssh = Net::SSH::Perl->new("$host", options => [ 
"use_pty 1", "interactive true"]); 
$ssh->login($user, $pass); 
#my($stdout, $stderr, $exit) = $ssh->cmd($cmd,[$stdin]); 
#$ssh->shell; 
#print ("$stdout\n"); 
#print ("$stderr\n"); 
#print ("$exit\n"); 

use Net::SSH::Expect; 
$ssh->send("passwd"); 
$ssh->waitfor('password:\s*\z', 1) or die "prompt 'password' not found after 1 second"; 
$ssh->send("frghthhyj"); 
$ssh->waitfor(':\s*\z', 1) or die "prompt 'New password:' not found"; 
$ssh->send("redhat"); 
$ssh->waitfor(':\s*\z', 1) or die "prompt 'Confirm new password:' not found"; 
$ssh->send("redhat"); 

내가 비록 오류 "Can't locate object method "send" via package "Net::SSH::Perl::SSH2"를 받고있어 스크립트가 아니다 "순 :: SSH :: 펄"의 방법을 찾습니다 "예상 순 :: SSH :"방법과 관련된 "보내기" 옳은.

+0

여기서 무엇을하고 싶은지 확실하지 않습니다. 두 개의 패키지로 동시에 하나의 참조를 축복 할 수는 없습니다. 즉, 단일 객체가 동시에 두 개의 다른 클래스에 속할 수 있습니다. – raina77ow

+0

기본적으로 나는 펄을 사용하여 원격 머신으로 ssh를 시도하고있다. 또한 원격 머신에서 루트 액세스를 얻으려면 root로 su를해야한다. Net :: SSH :: Perl과 관련된 my ($ stdout, $ stderr, $ exit) = $ ssh-> cmd ($ cmd, [$ stdin]) "가 작동하지 않으므로"send " Net :: SSH :: Expect. 이것을 시도하기 전에 Net :: SSH :: Expect의 기능을 확인하고 싶었으므로 공식 페이지에서 사용할 수있는 기본 코드를 사용했습니다. 나는 펄에서 초보자이기 때문에 이것이 가능할 지 확신 할 수 없다. 친절하게 조언하십시오. – Karthik

+1

Net :: SSH :: Expect를 사용하여 로그인 할 수 있습니다. 맨 페이지를 참조하십시오. – Pradeep

답변

2

Net::SSH::Expect에 대한 설명서를 살펴보십시오. 객체, 로그인 등의 인스턴스를 생성하는 방법을 보여줍니다.

Net::SSH::Perl을 통해 로그인하여 인스턴스 $ssh을 Expect 객체로 마술 변환 할 수 없습니다. 처음부터 Expect로 시작하십시오.

+0

감사합니다. Miller. 문제는 Net :: SSH :: Perl에서 사용할 수있는 "$ ssh-> shell"메서드에 대한 대체 항목을 찾을 수 없다는 것입니다. 로그인 자동화와 함께이 스크립트를 사용하여 SSH 클라이언트를 교체해야합니다. – Karthik

관련 문제