perl - 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 ?
解决方案
...可以禁用 StrictHostKeyChecking
通常这是不正常的,这就是默认启用 StrictHostKeyChecking 的原因。如果你禁用它,那么中间的 SSH 人攻击是可能的。只有在您可以确保不会发生此类攻击的情况下,这样做才是安全的,例如通过使用完全受信任的网络(例如与您所在的同一台计算机的连接)。
解决此问题的正确方法实际上是写在错误消息中:
...远程主机公钥可能不存在于“~/.ssh/known_hosts”文件中
因此,请确保主机已被信任。这可以通过使用 SSH 连接到主机并根据您知道主机应该拥有的主机密钥检查提供的主机密钥来完成。一旦被接受,它将被放入known_hosts
文件中。
推荐阅读
- flutter - 从 DropdownButton 在正确的类别上显示文本字段
- javascript - 如何在不覆盖以前数据的情况下在 DynamoDB 表的 Item 属性中添加新数据?
- dc.js - dc.js 动态瀑布图
- excel - Power Query - M 语言:多列的总和与分组依据
- docker - Dockerized NGINX:在上游“odoo:8069”中找不到主机
- python - 将层次索引转换为 Pandas 中的列
- reactjs - 如何使用 axios 从响应中获取数据
- python - 有没有办法只在 imdbpy 中获取评论评论的内容
- drake - pydrake URDF 设置动态参数
- java - 如何从远程 maven 存储库更新 pom.xml SNAPSHOT 依赖版本而不手动触摸它?