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 文档,我可以看到 ConnectionAttempts
和 ConnectTimeout
应该转到 default_ssh_opts
而不是 master_opts
。请尝试一下。
【讨论】:
以上是关于perl Openssh ConnectionTimeout 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
perl Openssh ConnectionTimeout 不起作用
如何使用 perl 和 Net::OpenSSH 在远程机器上启动后台进程?