You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Net::SSH::Expect后,如何检查SSH连接是否成功?是否有布尔返回方法?

好的,我来帮你解决这个问题。Net::SSH::Expect 本身并没有提供一个直接返回布尔值的 is_connected() 方法,但我们可以通过几种可靠的方式来判断 SSH 连接是否成功建立,下面是具体的实现方案:

1. 通过 login() 方法的返回值判断初始连接状态

要注意:你当前的代码只是初始化了 SSH 对象的参数,并没有实际发起连接动作。真正的 SSH 连接是通过调用 login() 方法完成的,这个方法会返回1表示连接成功,0表示失败,非常适合用来做判断:

#!/usr/bin/perl
use Net::SSH::Expect;
my $ssh = Net::SSH::Expect->new (
    host => 'hostip',
    user => 'user',
    password => 'password',
    raw_pty => 1,
    timeout => 10, # 建议加上超时时间,避免因网络问题无限阻塞
);

# 发起登录并检查结果
my $login_success = $ssh->login();
if ($login_success) {
    print "SSH 连接成功建立!\n";
    # 这里可以执行后续的命令操作
} else {
    # 用 error() 方法获取具体失败原因(比如密码错误、主机不可达等)
    die "SSH 连接失败: " . $ssh->error();
}

$ssh->close();

2. 后续检查连接是否存活

如果在连接建立后,你需要判断连接是否仍然有效,可以尝试执行一个简单的测试命令(比如 echo),通过 exec() 方法的返回值来验证:

# 检查现有连接是否还活着
if ($ssh->exec("echo 'connection check'")) {
    print "连接仍然有效\n";
} else {
    die "连接已断开: " . $ssh->error();
}

补充提示

  • 一定要在 new() 初始化时加上 timeout 参数,否则遇到网络异常时程序会一直卡住。
  • error() 方法是排查连接问题的核心工具,它会返回详细的错误描述,帮你快速定位问题根源。

内容的提问来源于stack exchange,提问作者vkk05

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:47:50