Net::SSH::P erl 中的 SSH 连接超时



我正在使用Net::SSH::P erl连接到远程服务器并执行命令。问题是,即使远程服务器长时间没有响应,它也不会超时。我在Net::SSH::P erl中找不到任何超时选项。

感谢任何实现超时的帮助。

注意:我无权修改 Net/SSH/Perl.pm

使用 ConnectTimeout 选项。

样本:

use Net::SSH::Perl;
my %params = ( protocol => "2,1",
                identity_files => ["/home/user/.ssh/test_id_dsa"],
                options => [    "BatchMode yes",
                                "ConnectTimeout 3",
                                "StrictHostKeyChecking no"],
                debug => 'true'
);

另请参阅:Net::SSH::P erl ConnectTimeout (ssh -o 选项(

正如我从您的%params中看到的,您使用DSA密钥在远程服务器上进行身份验证。你真的需要使用Net::SSH::Perl提供的原生Perl SSH实现吗?在某些情况下,它很有用,因为您不能只包装常规ssh调用(例如,如果您需要提供明文密码以连接到服务器(,但它缺少许多有用的SSH选项 - 您刚刚找到了其中之一。

我建议您尝试使用 Net::SSH 代替(这是系统ssh二进制文件的非常简单的包装器(,并给它一个带有 -o ConnectTimeoutServerAliveInterval选项,或者上面@ChankeyPathak引用的Net::OpenSSH并使用其check_master方法(正如我从描述中理解的那样, 它看起来像你需要的(。

ssh_config(1)手册很好地描述了ConnectTimeout(在建立连接时检测超时(以及TCPKeepAliveServerAliveInterval(检测已建立连接的超时(。

供您参考:这是在 Net::SSH::Perl 中实现的选项的完整列表,从其Config.pm中抓取。如果确实需要使用此处未列出的任何其他选项,请使用其他 SSH 模块。

BindAddress
Host
BatchMode
ChallengeResponseAuthentication
Cipher
Ciphers
Compression
CompressionLevel
DSAAuthentication
GlobalKnownHostsFile
HostKeyAlgorithms
HostName
IdentityFile
NumberOfPasswordPrompts
PasswordAuthentication
PasswordPromptHost
PasswordPromptLogin
Port
Protocol
RhostsAuthentication
RhostsRSAAuthentication
RSAAuthentication
StrictHostKeyChecking
UsePrivilegedPort
User
UserKnownHostsFile

我也有类似的问题。我正在执行一个因任何原因没有终止的命令。所以我把对 $ssh->cmd 的调用包装在一个带有警报的评估中,如 perldoc -f alarm 中所述。不是最好的解决方案,但是唯一的选择,因为我无法修改我正在调用的命令。

相关内容

  • 没有找到相关文章