gpt4 book ai didi

主机不可访问时的 Perl ssh 错误处理

转载 作者:行者123 更新时间:2023-12-02 13:49:11 27 4
gpt4 key购买 nike

我在 perl 中使用 expect 来做 ssh,下面是我的代码片段。

my $exp = Expect->spawn("ssh renjithp\@192.168.1.12") or die "could not spawn ssh";
my $op = $exp->expect(undef,'renjithp>');
print "*$op*";

如果主机无法访问(目标 IP 已关闭),我想处理错误,我的印象是当 ip 无法访问时会出现死机,但是当我给出错误的 IP 时,脚本不会终止并且它会连续执行。

处理这种情况的正确方法是什么?

已编辑
我观察到 $op 值在 ssh 成功时为 1,当目标 IP 未启动时为 0。使用 $op 做出决定是正确的方法吗?

我还有一个疑问,当无法访问目标 IP 时,为什么控制超出预期,我的意思是 '$exp->expect(undef,'renjithp>');'只有在得到正确提示后才应该返回?

最佳答案

如果您需要使用 expect 模块使 ssh 连接取决于 IP 地址的可达性,您应该使用 nc 测试连接性。第一的...

my $addr = "192.168.1.12";
if (system("nc -w 1 -z $addr 22")==0) {
my $exp = Expect->spawn("ssh renjithp\@$addr") or die "could not spawn ssh";
my $op = $exp->expect(undef,'renjithp>');
print "*$op*";
} else {
print "Host $addr is unreachable\n";
}
nc命令是 netcat ... nc -z测试 TCP 端口是否打开

或者,您可以使用像 Net::OpenSSH 这样的模块。这使得错误处理更容易一些......
use Net::OpenSSH;

my $ssh = Net::OpenSSH->new($host);
$ssh->error and
die "Couldn't establish SSH connection: ". $ssh->error;

关于主机不可访问时的 Perl ssh 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com