在 Perl 的 ssh 连接中捕获错误主机名的错误消息(使用 Net::OpenSSH)
Posted
技术标签:
【中文标题】在 Perl 的 ssh 连接中捕获错误主机名的错误消息(使用 Net::OpenSSH)【英文标题】:Capture error message for a wrong hostname in ssh connection in Perl (using Net::OpenSSH) 【发布时间】:2015-01-08 01:33:24 【问题描述】:我正在使用 Net::OpenSSH 模块通过 ssh 密钥身份验证建立 ssh 连接。
my $ssh_handle = Net::OpenSSH->new(user_id@host_name)
我正在尝试捕获在 ssh 连接尝试期间可能发生的不同异常情况。我为此使用 Try::Tiny。
特别是,我试图捕捉在参数中传递了错误的主机名/IP 地址的情况。 在这种情况下,Net::OpenSSH 模块在控制台中抛出以下错误“ssh: Could not resolve hostname x.x.x.: Name or service not known”。
我知道 $ssh_handle->error 给出了错误信息(如果有任何错误) 连接尝试后。但在主机名/IP 错误的情况下,它会包含一条通用消息“无法建立主 SSH 连接:主进程意外退出”。 我相信这是许多错误场景的常见错误消息。所以我不能确定“错误的主机名”错误。
有什么方法可以捕获错误字符串“ssh: Could not resolve hostname x.x.x.: Name or service not known”?
【问题讨论】:
【参考方案1】:将主 SSH 标准错误流重定向到某个文件并在之后查阅:
# untested!
open my $ssherr_fh, '>', 'openssh-err.log' or die $!;
my $ssh = Net::OpenSSH->new(user_id@host_name,
master_stderr_fh => $ssherr_fh);
if ($ssh->error)
open my $f, '<', 'openssh-err.log';
my @err = <$f>;
print "ssh failed:\n@err\n";
【讨论】:
以上是关于在 Perl 的 ssh 连接中捕获错误主机名的错误消息(使用 Net::OpenSSH)的主要内容,如果未能解决你的问题,请参考以下文章
在 AFNetworking 中找不到具有指定主机名的服务器
如何在 ubuntu 终端的共享主机中连接 SSH 服务器?