首页 > 解决方案 > Net::OpenSSH 模块上的 Perl SSH 连接错误

问题描述

我正在使用 perlNet::OpenSSH模块连接到服务器。

我的代码如下:

my ($host, $user, $passwd) = ("my.ip.address.here", "userxyz", "passwordxyz");
my $ssh = Net::OpenSSH->new( $host,
                             user => $user,
                             password => $passwd
);
$ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;

当我运行此代码时,出现以下错误:

Couldn't establish SSH connection: unable to establish master SSH connection: the authenticity of the target host can't be established; the remote host public key is probably not present in the '~/.ssh/known_hosts' file ......

当我在 perlmonks 中搜索相同的解决方案时,我发现disable StrictHostKeyChecking.

所以我修改了下面的代码,它工作了。

$ssh = Net::OpenSSH->new($host,
           master_opts => [-o => "StrictHostKeyChecking=no"],
           ...);

我需要专家的建议,是否可以禁用 StrictHostKeyChecking ?

标签: perlssh

解决方案


...可以禁用 StrictHostKeyChecking

通常这是不正常的,这就是默认启用 StrictHostKeyChecking 的原因。如果你禁用它,那么中间的 SSH 人攻击是可能的。只有在您可以确保不会发生此类攻击的情况下,这样做才是安全的,例如通过使用完全受信任的网络(例如与您所在的同一台计算机的连接)。

解决此问题的正确方法实际上是写在错误消息中:

...远程主机公钥可能不存在于“~/.ssh/known_hosts”文件中

因此,请确保主机已被信任。这可以通过使用 SSH 连接到主机并根据您知道主机应该拥有的主机密钥检查提供的主机密钥来完成。一旦被接受,它将被放入known_hosts文件中。


推荐阅读