Perl 在linux上自动替换主机密钥

Perl 在linux上自动替换主机密钥,perl,sftp,Perl,Sftp,我有一个用以下代码连接到SFTP服务器的脚本: use Net::SFTP::Foreign; my %cfg = ( user => "$user", password => "$password", port => 22, more => [-o => 'StrictHostKeyChecking no'] ); my $sftp = Net::SFTP::Foreign->

我有一个用以下代码连接到SFTP服务器的脚本:

use Net::SFTP::Foreign;
my %cfg = (
    user        => "$user", 
    password    => "$password",
    port        => 22,
    more        => [-o => 'StrictHostKeyChecking no']
);
my $sftp = Net::SFTP::Foreign->new("$host",%cfg);
我使用StrictHostKeyChecking来确保脚本自动接受ssh密钥。 当服务器用新的主机密钥替换主机密钥时,问题就开始了。我收到错误:警告:远程主机标识已更改

因此,我必须通过运行ssh-keygen-R testserver.com手动删除密钥 之后,脚本又可以正常工作了。 我正试图找到一种方法,在密钥发生更改时自动替换它。 从技术上讲,每次脚本运行时,我都可以运行ssh-keygen-R testserver.com,但我不喜欢这种解决方案。
到目前为止,我还无法找到一种很好的自动替换密钥的方法。

添加另一个选项,将UserKnownHostsFile指向/dev/null应该可以做到这一点,但从安全角度来看,不建议这样做;-)


也许
strichhostkeychecking=no
我相信它在没有equal的情况下也能工作:在首次运行时会自动添加密钥。只有在已知的\u hosts文件中已经存在密钥并且服务器正在提供不同的密钥时,才会失败。将已知的\u hosts符号链接到/dev/null;)@看起来这是正确的解决方案。非常感谢。
use Net::SFTP::Foreign;
my %cfg = (
    user        => "$user", 
    password    => "$password",
    port        => 22,
    more        => [-o => 'StrictHostKeyChecking=no',
                    -o => 'UserKnownHostsFile=/dev/null']
);
my $sftp = Net::SFTP::Foreign->new("$host",%cfg);