perl Openssh ConnectionTimeout 不起作用

Posted

技术标签:

【中文标题】perl Openssh ConnectionTimeout 不起作用【英文标题】:perl Openssh ConnectionTimeout not working 【发布时间】:2013-03-18 23:40:59 【问题描述】:

我有一个 perl 脚本启动一个 EC2 实例,然后使用 Net::OpenSSH 连接并运行一些命令。

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: 错误消息,所以 ssh 没有返回错误。

这是正确的语法吗?有没有更好的方法来处理 EC2 实例可能需要几分钟才能可用的事实?

【问题讨论】:

那么它返回什么错误? @darch - 它不会返回错误,但似乎不会重试 - 脚本的其余部分因连接不存在而终止。它在启动后一分钟就死了,所以它不会等待和重试。 很抱歉一直在强调这一点,但你的措辞让人有点怀疑。 new 总是返回一个新对象,即使发生错误。 $ssh->error 应包含未建立连接的原因。你是说$ssh->error 是空的吗? 不,我的意思是它不会尝试连接 30 次,尝试之间等待 30 秒。我会检查 $ssh->error,但我认为这与问题无关。 查找失败等错误会阻止 ssh 重试。 【参考方案1】:

根据 CPAN 文档,我可以看到 ConnectionAttemptsConnectTimeout 应该转到 default_ssh_opts 而不是 master_opts。请尝试一下。

【讨论】:

以上是关于perl Openssh ConnectionTimeout 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Perl 和 OpenSSH 与 Switch 交互

perl Openssh ConnectionTimeout 不起作用

如何使用 perl 和 Net::OpenSSH 在远程机器上启动后台进程?

Perl:使用 Net::OpenSSH 的 scp_put 拒绝权限

如何在 perl 的 openssh 中指定 -v 选项

OpenSSH 授权密钥文件的最佳 perl 正则表达式?