2013-03-28 2 views
1

perl 스크립트에서 EC2 인스턴스를 시작한 다음 Net :: OpenSSH를 사용하여 일부 명령을 연결하고 실행합니다.perl Openssh ConnectionTimeout이 작동하지 않습니다.

my $ssh = Net::OpenSSH->new($username . "\@" . $host, 
      key_path => $key_path, 
      master_opts => [-o => "ConnectionAttempts=30", -o => "ConnectTimeout=30"]); 

if ($ssh->error) { 
    die "Timeout: " . $ssh->error . "\n"; 
} 

이것은 작동하지 않는 것처럼 보입니다.이 동작은 15 분 동안 시도한 다음 종료해야하지만 거의 즉시 반환됩니다. 나는 Timeout : error 메시지를받지 못하기 때문에 ssh가 오류를 반환하지 않는다.

올바른 구문입니까? EC2 인스턴스를 사용할 수 있기까지 몇 분이 걸릴 수 있다는 사실을 처리하는 더 좋은 방법이 있습니까?

+0

그럼 어떤 오류가 발생합니까? – darch

+0

@darch - 오류는 반환하지 않지만 다시 시도하지는 않습니다. 연결이 없기 때문에 나머지 스크립트가 종료됩니다. 그리고 시작된 지 1 분 후에 죽어 가고 있으므로 기다리지 않고 다시 시도 할 필요가 없습니다. – chris

+1

이런 일을 계속해서 유감이지만 구두쇠는 조금 의심 스럽습니다. 'new'는 에러가 발생하더라도 항상 새로운 객체를 리턴합니다. '$ ssh-> error'는 연결이 안되는 이유를 포함해야합니다. '$ ssh-> error'가 비어 있다고 말하는 겁니까? – darch

답변

0

CPAN 문서에서 볼 수 있듯이 ConnectionAttemptsConnectTimeoutmaster_opts 대신 default_ssh_opts이되어야합니다. 그걸 시험해보십시오.

관련 문제